python模塊和包


模塊就是程序,任何python程序都可以作為模塊進行導入。模塊用於定義函數和類等。當導入模塊后,會有一個__pycache__子目錄,這個緩存文件目錄包含處理后的文件,能更高效的處理,以后再次導入則使用它。

python包含一組稱為標准庫的模塊,默認在/usr/local/lib/python3.6目錄下(我的python版本是3.6,不同版本位置可能不同)都可以看到,也可以通過導入模塊,然后使用__file__方法來查看模塊的路徑:

 

模塊導入方法

python中的模塊使用命令import來導入。格式:模塊.函數。也可以使用另外一種形式:from 模塊 import 函數。

在這里我自定義一個模塊hello.py:
#cat hello.py
def test1(): print("hello-------one") def test2(): print("hello-------two") test1() test2() 然后創建另一個m.py文件來調用這個模塊: #cat m.py
#模塊導入方式一 import hello hello.test1() hello.test2() #模塊導入方式二 from hello import test1,test2 test1() test2() #模塊導入方式三 from hello import * test1() test2()

盡管可以使用不同的方法來調用模塊,但是發現一個問題,就是被調用模塊中的函數重復運行了。為了避免這個情況,關鍵是檢查模塊是作為程序運行還是被導入另一個程序的,為此需要變量__name__。在主程序中,變量__name__的值為'__main__',而在導入的模塊中,這個變量值被設置為該模塊的名稱,所以可以在模塊中加入一個if語句,if __name__ == '__main__'。

# cat hello.py

#!/usr/bin/evn python3

def test1():
print("hello-------one")
def test2(): print("hello-------two") if __name__ == '__main__': test1() test2()

此時再次運行可以發現不會重復出現了:

 

包也是一種模塊,可以包含其他模塊,包是一個目錄。要被python視為包,目錄中必須包含__init__.py文件,包的導入會首先執行__init__.py。其他模塊加入包中,放入包的目錄即可。這里python默認包的路徑為:

/usr/local/lib/python3.6/site-packages。

 

包的創建使用

創建一個pak目錄,並分別創建__init__.py、test1.py和test2.py三個文件:

# cat test1.py
def test1():
print("test1-----")

# cat test2.py
def test2():
print("test2-----")

# cat __init__.py
__all__ = ["test1","test2"]
from . import *

1)包要想能夠使用,__init__.py文件得添加一句from . import *,意思是從當前包的目錄導入所有模塊文件,因為包的導入會首先執行__init__.py。

2)變量__all__包含一個列表,起到過濾變量、函數和類的作用。因為模塊中可能包含大量的不需要的變量、函數和類,設置__all__,則會在以import *方式導入時,導入所有不以下划線打頭的全局名稱。

當把變量__all__改為了__all__= ["test1"],可以看到test2模塊導入不了:

也可以通過調用變量__all__來查看可以調用的模塊。包的導入方式和模塊一樣也可以通過from 包 import 模塊。

 

使用help可以查看幫助

 

使用__doc__查看模塊信息

 

使用file查看模塊源碼位置

 

一些常用的模塊:sys、os、fileinput、集合,堆和雙端隊列、time、random、shelve,json、re等等。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM