Python中,一個.py
文件就稱之爲一個模塊。
那麼使用模塊有什麼好處呢?html
(1)提升了代碼的可維護性。
(2)代碼沒必要從零開始,當一個模塊編寫完畢後,就能夠被其餘地方應用。
(3)能夠避免函數名和變量名衝突,相同的函數名和變量能夠存放在不一樣的模塊中,可是要注意儘可能不要與內置函數名字衝突。
Python全部的內置函數: https://docs.python.org/3/lib...
爲避免模塊名衝突,python又引入了按目錄來阻止模塊衝突的方法,稱爲包(python package)。
一個abc.py
的文件就是一個名字爲abc
的模塊,一個xyz.py
的文件就是一個名字爲xyz
的模塊。假如abc
和xyz
這兩個模塊名字與其餘模塊衝突了,因而咱們能夠經過不一樣的包來組織模塊,避免模塊衝突。
則可爲:python
↓ mycompany # 按目錄存放 _init_.py # 模塊名:mycompany abc.py # 模塊名:mycompany.abc xyz.py # 模塊名:mycompany.xyz
引入了包之後,只要頂層的包名不與別人衝突,那全部模塊都不會與別人衝突。
每個包目錄下都會有一個_init_.py
的文件,這個文件是必須存在的,不然python就把這個目錄當成普通目錄,而不是一個包。_init_.py
能夠是空文件,也能夠有python代碼,由於_init_.py
自己就是一個模塊。linux
Python內置了不少很是有用的模塊,只要安裝完畢,這些模塊就能夠經過import
馬上導入使用。
例以下列小程序:以自建的sys模塊,編寫一個hello的模塊hello.py
。小程序
# !/usr/bin/env python # -1- # -*-coding:utf-8 -*- # -2- _author_ = 'xionglp' # 使用_author_變量把做者寫進去 import sys def test(): args = sys.argv if len(args) == 1: print ('hello,world!') elif len(args) ==2: print('hello,%s !'% args[1]) else: print('too many arguments!') if __name__ == '__main__': test()
說明:app
import sys
:導入sys
模塊。以後即可以利用sys這個變量,訪問sys模塊的全部功能。sys
模塊有一個argv
變量,用list
存儲了命令行的全部參數。argv
至少有一個元素,由於第一個參數永遠是該.py文件的名稱。hello.py
文件時,python解釋器就把一個特殊變量__name__
置爲__main__
。若是在其餘地方導入該模塊時,if
判斷將失敗,即if
僅在此模塊單獨運行時生效。所以這種if
測試可讓一個模塊經過命令行運行時執行一些額外的代碼,最多見的就是運行測試。在交互式環境(cmd)中導入該模塊:函數
>>> import hello >>> hello.test() hello, world!
除了Python本身的包,還能夠安裝安裝第三方模塊。第三方包安裝是經過包管理工具pip
完成的。
通常來講,第三方庫都會在Python官方的pypi.python.org
網站註冊。因此要安裝一個第三方庫,必須先知道該庫的名稱,能夠在官網或者pypi
上搜索。好比Pillow的名稱叫Pillow,所以,安裝Pillow的命令就是:pip install Pillow
工具
easy_install.exe
,例如:D:PythonScriptseasy_install.exe pip
(pip安裝成功)pip install pillow
以下:測試
安裝成功後即可以使用Pillow了。其餘經常使用的第三方庫還有:MySQL的驅動、用於科學計算的NumPy庫等等。網站
pip升級:
在使用pip進行安裝時,有時候會提示pip的版本過低,須要upgrade。提示會給出要執行的語句,按照提示執行就行。
執行命令:python –m pip install –upgrade pip
編碼
咱們也能夠導入本身寫入的模塊。當咱們試圖加載一個模塊時,Python會在指定的路徑下搜索對應的.py
文件,若是找不到,就會報錯,例如:
默認狀況下,Python解釋器會搜索當前目錄、全部已安裝的內置模塊和第三方模塊,搜索路徑存放在sys
模塊的path
變量中:
>>>import sys >>>sys.path
若是咱們要添加本身的搜索目錄,有兩種方法:
sys.path
,添加要搜索的目錄,這種方法是在運行時修改,運行結束後失效。>>> import sys >>> sys.path.append('/Users/xionglp/my_py_scripts')
PYTHONPATH
,該環境變量的內容會被自動添加到模塊搜索路徑中。設置方式與設置Path環境變量相似。注意只須要添加你本身的搜索路徑,Python本身自己的搜索路徑不受影響。【補充點能量】if __name__ =="__main__":
__name__
:爲系統變量,有兩個取值。當模塊是被調用執行時,取值爲模塊的名字;當模塊是直接執行時,則該變量取值爲__name__
。if __name__ == "__main__"
實現的功能:可讓模塊既能夠導入到別的模塊中用,也能夠本身執行。英文解釋說: make a script both importable and executeable
例如:新建模塊atest.py
# !/usr/bin/env python3 # -*- coding:utf-8 -*- 'a test module' def addFunc(a, b): return a + b print('a_test_module\'s result is ', addFunc(1, 1))
新建模塊anothertest.py
# !/usr/bin/env python3 # -*- coding :utf-8 -*- 'another test module' import atest print('調用another test module模塊執行的結果時:',atest.addFunc(12,23))
運行:
D:\Python_project>python atest.py a_test_module's result is 2 D:\Python_project>python anothertest.py a_test_module's result is 2 調用another test module模塊執行的結果時: 35
說明:當運行anothertest.py的時候,先運行了atest.py,再運行anothertest.py。
若不但願出現atest的內容,python提供了一個系統變量:__name__
。能夠把被調用的測試代碼寫在if
語句裏,當調用該module
時,此時的__name__
取值爲該模塊的名字,因此if
判斷爲假,不執行後續代碼以下:
if __name__ == '__main__':` print ('atest的計算結果:',addFunc(1,1))
則運行結果爲:
D:\Python_project>python anothertest.py 調用another test module模塊執行的結果時: 35
此時咱們就獲得了預期結果,不輸出多餘的結果。
❤ thanks for watching, keep on updating...