這篇文章主要介紹Python模塊導入機制與大型項目的規(guī)范是什么,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

日常編程中,為了能夠復用寫過的代碼邏輯,我們都會把這些代碼封裝成為模塊,需要用到的時候可以直接導入復用,以便提高我們的開發(fā)效率。 module能定義函數(shù)、類、變量,也能包含可執(zhí)行的代碼。module來源有3種: ①Python內(nèi)置的模塊(標準庫); ②第三方模塊; ③自定義模塊;
模塊的導入一般是在文件頭使用import關鍵字,import一個模塊相當于先執(zhí)行了一次這個被導入模塊,然后在本命名空間建立一個與被導入模塊命名空間的聯(lián)系,相當于在本命名空間新建了一個變量,這個變量名稱是被導入模塊的名稱,指向被導入模塊的命名空間。所以導入的這個模塊相當于一個變量,因此多次導入同一個模塊只有第一次導入的時候會被執(zhí)行(后續(xù)導入會判斷到這個模塊變量已存在所以不執(zhí)行)

每一個導入的模塊都會在Python內(nèi)置字典sys.modules中,Python一啟動,它將被加載在內(nèi)存中,當我們導入新modules,sys.modules將自動記錄下該module。 Python的模塊查找路徑的機制是:
所以對于我們自己編寫的模塊,如果封裝并發(fā)布到了PyPi,則可以用pip install直接安裝,并在啟動時加載在內(nèi)存中,通過sys.modules可以查看到 而對于僅需要在本項目中復用的模塊,我們在復用代碼中將其路徑加入到sys.path中,同樣可以引用到該模塊。
所有的模塊import都從“根節(jié)點”開始。根節(jié)點的位置由sys.path中的路徑?jīng)Q定,項目的根目錄一般自動在sys.path中。如果希望程序能處處執(zhí)行,需手動修改sys.path
import sys,os BASE_DIR = os.path.dirname(os.path.abspath(__file__))#項目根目錄所在的絕對路徑sys.path.append(BASE_DIR)import A, B #導入A、B包復制代碼
只關心相對自己當前目錄的模塊位置就好。不能在包(package)的內(nèi)部直接執(zhí)行(會報錯)。不管根節(jié)點在哪兒,包內(nèi)的模塊相對位置都是正確的。
#from . import b2 #這種導入方式會報錯,只有在包內(nèi)部直接執(zhí)行的時候才可以這樣導入。import b2#正確b2.print_b2()復制代碼
當一個文件夾下有init.py時,意為該文件夾是一個包(package),其下的多個模塊(module)構(gòu)成一個整體,而這些模塊(module)都可通過同一個包(package)導入其他代碼中。 其中init.py文件 用于組織包(package),方便管理各個模塊之間的引用、控制著包的導入行為。
該文件可以什么內(nèi)容都不寫,即為空文件(為空時,僅僅用import [該包]形式 是什么也做不了的),存在即可,相當于一個標記。
在python3中,即使包下沒有init.py文件,import 包仍然不會報錯,而在python2中,包下一定要有該文件,否則import 包會報錯
all 是一個重要的變量,用來指定此包(package)被import *時,哪些模塊(module)會被import進【當前作用域中】。不在all列表中的模塊不會被其他程序引用。可以重寫all,如 all= [‘當前所屬包模塊1名字’, ‘模塊1名字’],如果寫了這個,則會按列表中的模塊名進行導入
在包內(nèi)部直接運行時,包的name == 'main',但是在外部導入包是,可以通過
if __name__ == '__main__':復制代碼
來避免實現(xiàn)包內(nèi)部調(diào)試時的邏輯
當兩個模塊A和B之間相互import時,就會出現(xiàn)循環(huán)導入的問題,此時程序運行會報錯:can not import name xxx,如:
# a.pyprint('from a.py')from b import x
y = 'a'復制代碼# b.pyprint('from b.py')from a import y
x = 'b'復制代碼我們來分析一下這種錯誤是怎么出現(xiàn)的:
因此在a.py中執(zhí)行from b import x的順序就是1->3,先引入b,b里面from a import y由相當于執(zhí)行了a.py,順序是1->2,因為此時b已經(jīng)引入所以不會執(zhí)行3,2中無法找到x對象,因為引入b時還沒執(zhí)行到x='b'這一步,所以報錯了
分離模塊,將同一類別的模塊放在同一目錄下,形成類別分明的目錄架構(gòu),如:

以上是Python模塊導入機制與大型項目的規(guī)范是什么的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關知識,歡迎關注創(chuàng)新互聯(lián)-成都網(wǎng)站建設公司行業(yè)資訊頻道!
網(wǎng)頁題目:Python模塊導入機制與大型項目的規(guī)范是什么-創(chuàng)新互聯(lián)
URL分享:http://www.chinadenli.net/article8/dchpop.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供建站公司、自適應網(wǎng)站、服務器托管、定制開發(fā)、關鍵詞優(yōu)化、電子商務
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容