[23] Python模塊和引入

1. 概述

本章對函數的模塊和引入進行入門級介紹。

  • 計算機編程的原理簡要介紹
  • 集成開發環境PyCharm
  • 變數名、數字、字元串、列表
  • 句式、注釋
  • 輸入和輸出
  • 條件判斷語句
  • 循環語句
  • 各類數據結構
  • 函數
  • 模塊和引入

是不是看到基本都完成了很有成就感?哈哈哈哈。

2. 模塊和引入

我們有了函數,就能開始寫長一點的程序了,但是我們在現實中並不可能把所有程序代碼集中在一個文件中,有時候我們可能會把函數分開在不同的文件中。我們可以把各個被分開的文件叫模塊,如果想使用這些模塊中的函數,我們需要引入。

project/├── sub1.py├── sub2.py├── sub3.py├── others/│ ├── sub4.py│ ├── sub5.py└── main.py

from...import...

從某文件引入函數,比如說我要運行main.py時,需要用到sub1.py里的某個函數,我就可以這麼寫:

from sub1 import function1from sub2 import function2, function22, function222

如果我們想要用到sub3裡面所有的函數,我們可以這麼些:

from sub3 import *

星號的意思是所有函數,這麼一寫我們就可以連接起兩個文件,被引入的函數就能直接叫名字拿來用,和我們之前函數章節講的沒差別。

如果有個文件夾擋在中間,比如sub4和sub5,我們只需要在之間聲明文件夾就行了,

from others.sub4 import *from others.sub5 import *

如果我們要引入的文件里有重名的函數,我們可以用as來重命名,

from sub1 import function1from sub2 import function1 as function21

接下來我們每次用function21的時候,Python就會自動指代為sub2里function1。

import

單個import是指引入某個文件,

import sub1import sub2, sub3, others.sub4, others.sub5 as sub5

我們把整個文件都引入了,如果我們要使用裡面的函數 ,就得先聲明哪個文件的哪個函數。

a = sub1.function1()b = sub2.function2(1, 2, Hello)c = others.sub4.foo()d = sub5.doo()

這裡sub5被賦予了化名,我們在接下來就直接用sub5來指代others文件夾下的sub5,當然你也可以命名成其他的名字,比如cat、dog、helen、nancy之類的都行。

3. 運行模塊

我們從現在開始,每寫一個文件,都必須在.py文件末尾加這麼一段代碼:

if __name__ == __main__: pass

if __name__ == __main__:

這個的意思是,如果我們這個文件是主文件的話,運行接下來的程序。估計被我這麼一說更玄乎了。我們在學函數時,如果一個文件裡面全是函數,都是def def的,我們即使運行它,它也沒有任何反應,唯一能讓它幹活的方法就是在最後加沒有def的代碼。但是當我們好多文件堆在一起,每當我們import的時候,Python便會編譯被引入的文件,並運行那些文件里非函數的代碼。這樣一來,我們本來只想使用一個文件中的幾個函數,沒想到把不是函數的代碼全運行了,這樣程序輸出就會亂七八糟。如果我們加上這個if語句的話,編譯時文件就會讓Python判斷該文件是否為主要程序,如果是,則運行代碼,如果不是,那麼這個文件只是個子文件。

#add_sub.pydef add(a, b, c): return a + b + cdef sub(a, b, c): return a - b - cif __name__ == __main__: res1 = add(1, 2, 3) res2 = sub(3, 2, 1) print(res1, res2)

像這麼一寫,如果我們寫好了這個.py文件,想要調試(debug)每個函數是否寫對,可以在if語句下加上我們的代碼來測試函數們。如果我們直接右擊這個文件點擊「Run」來運行的話,Python就知道這個文件是主文件,if下的代碼被執行,輸出我們要的結果。

#import_example.pyimport add_subres1 = add_sub.add(10, 2, 3)res2 = add_sub.sub(30, 2, 1)print(res1, res2)

如果我們要右擊運行這個文件,我們可以看到成功運行,也用到了剛才我們寫的文件里的函數,我們可以嘗試著把add_sub.py里的if語句去除,最後那三行的縮進全去了(都靠最左邊),可以發現在運行import_example這個文件時,由於沒有在add_sub里讓Python去識別是否是主文件,add_sub里用來調試的代碼也全部被運行了。

簡而言之,if __name__ == __main__:加在最後,就是為了告訴Python運行時識別文件的主次。

pass:

當我們沒啥代碼能寫的時候,寫個pass就行了。比如那個add_sub的文件,邏輯簡單,眼睛看看就知道對錯的, 沒必要寫調試的代碼,那我們就直接寫:

#add_sub.pydef add(a, b, c): return a + b + cdef sub(a, b, c): return a - b - cif __name__ == __main__: pass

pass意思就和我們鬥地主的過一樣,沒有東西能寫的時候,寫個pass,裝個樣子,讓你充分體會何為形式主義。pass相當於一個空白行,但是空著的話Python編譯會報錯,因為它會認為這個句式語法不完整,有了pass,就能充數告訴Python這裡是代碼行,至少看著這快代碼是完整的。

具體還能有以下操作:

def foo(): passlist1 = [1, 2, 3, 4, 5, ]for num in list1: pass

即使在def和for下面也能用。但是pass並沒有任何實質的功能,除了充數,我們為什麼還要加它呢?原因在於,我們寫代碼的時候,很可能就是先把要做的提綱(比如要寫的函數或者調試代碼)列了,這時候我們先寫上pass,做個標記,日後再慢慢把pass換成有用的代碼,在我們邊寫邊調試的時候,這些寫著pass的還沒有成形的函數或者代碼可以先忽略不看,但同時也不被報錯。

接下來我會介紹如何安裝庫,Python的最強大的地方在於各種各樣強大的庫,做網站做硬體處理資料庫做數學等等,都能用其已有的庫來輕鬆實現。最後祝我早日買到新電腦。


推薦閱讀:

python中的時間處理大總結
用數據告訴你在上海你得這樣租(sheng)房(dian)子(qian)
Python · 樸素貝葉斯(零)· 簡介
Python數據分析及可視化實例之正則Re

TAG:Python | 计算机科学 | 编程 |