python之模塊化編程
模塊化編程是每個程序員的必備,今天就聊聊模塊吧
模塊
python中內置了許多模塊,只要把python安裝完成,這些模塊就能立即使用。
面試的時候也有問到python的內建模塊,這裡列舉五個模塊:
sys
os
math
re
datetime
現在以內建的sys為例,編寫一個Hello的模塊
解釋
第一行和第二行是標準的注釋,第一行的注釋可以讓這個Helllo.py文件直接在linux/unix/mac上運行,第二行注釋表示.py文件本身使用標準的utf-8編碼。
第四行是一個字元串,表示模塊的文檔注釋,任何模塊代碼的第一個字元串都被視為文檔的注釋
第六行使用__author__變數,把作者加進去,這樣當你公開代碼的時候,別人就可以久仰你大名。
以上就是python模塊的標準化模板,當然你也可以全部刪除不寫,但是,按標準辦事總是沒錯。
你可能注意到了,使用sys的第一步就是導入這個模塊:
import sys
導入模塊後,我們就有一個變數sys來指向該模塊,利用sys這個變數,就可以訪問sys的所有功能。
sys模塊有一個argv的變數,用list存儲了命令行的所有參數。argv至少有一個元素,因為第一個參數永遠是該.py文件的名稱。例如:
運行python Hello.py獲得的就是sys.argv就是[Hello.py]
運行python Hello.py sixkery 獲得的就是[Hello.py sixkery]
最後注意到這兩行代碼:
當我們在命令行運行Hello模塊文件時,python解釋器把一個特殊變數__name__置為__main__,而如果在其他地方導入該Hello.py模塊時,if判斷將失敗,因此,這種if測試可以讓一個模塊通過命令行運行時執行一些額外的代碼,最常見的就是運行測試。
我們用命令行運行Hello.py來看看效果。
如果啟動python交互環境下,再導入Hello模塊:
導入時,並沒有列印Hello World!
調用時才列印:
結果:
Hello World!
作用域
在一個模塊中,我們可以定義許多函數和變數,但是有的函數和變數我們希望給別人使用,有的函數和變數,我們僅僅希望在模塊內部使用,在python中,是通過_前綴來實現的。
正常的函數名和變數是公開的(public),可以被直接引用,比如ABC,x1,pl
類似__xx__這樣的變數是特殊變數,可以被直接引用,但是有特殊用途比如上面的__author__、__name__就是特殊變數。我們自己定義的時候,一般不用這樣的變數名。
類似__xx,_xx,這樣的函數或變數名就是非公開的(private),不應該被直接引用,比如__abc、_abc等
之所以我們說,private函數和變數不應該被直接引用,是因為在python中,並沒有一種方法可以完全限制訪問priva函數和變數。,但是,從編程習慣上不應該引用。
私有變數不應該被別人引用,那他們有什麼作用呢?看個例子:
我們在模塊里公開greeting()函數,而把內部邏輯用private函數隱藏起來,這樣,在調用greeting()函數時就不用管內部的private函數細節了,這也是一種代碼封裝和抽象的方法,即:
外部不需要引用的函數全部定義成private,只有外部需要引用的函數才公開(public)
總結
模塊化編程可以讓你的程序更加有條理性,思路更加清晰。希望你掌握它。


※用python解析上萬條評論,揭秘《邪不壓正》到底在講什麼
TAG:sixkery |