本篇主要介紹Python模塊和如何將模塊導(dǎo)入編程環(huán)境中撼唾,模塊是用來組織代碼的方法。
模塊(module)
模塊支持從邏輯上組織Python代碼音婶。當(dāng)程序員編寫的代碼量變得相當(dāng)大的時(shí)候慨畸,就可以把代碼分成一些有組織的代碼段,彼此之間可以交互衣式〈缡浚可以是一個(gè)包含數(shù)據(jù)成員和方法的類,也可以是一組相關(guān)但彼此獨(dú)立的操作函數(shù)碴卧。這些代碼之間是共享的弱卡。把其他模塊中屬性附加到你的模塊中的操作叫做導(dǎo)入(import),那些自我包含且有組織的代碼片段稱為模塊(module)住册。
命名空間(namespace)
命名空間(namespace)就是一個(gè)從名稱到對(duì)象的關(guān)系映射集合婶博。
在程序執(zhí)行期間有三個(gè)活動(dòng)的命名空間,分別為局部命名空間(local namespace)荧飞、全局命名空間(global namespace)凡人、內(nèi)建名稱空間(build-in namespace)。
我們可以使用globals()和locals()內(nèi)建函數(shù)判斷一個(gè)名字屬于哪一個(gè)命名空間叹阔。
globals()和locals()內(nèi)建函數(shù)分別返回調(diào)用者全局和局部命名空間的字典挠轴。
命名空間與變量作用域
變量作用域除了指出名字與對(duì)象間的映射關(guān)系,還指出了從用戶代碼的哪些物理位置可以訪問到這些名字耳幢。
在程序的執(zhí)行過程中岸晦,局部命名空間和作用域會(huì)隨著函數(shù)調(diào)用而變化。
名稱的查找
當(dāng)函數(shù)、變量等信息發(fā)生重名時(shí)委煤,Python會(huì)按照"local namespace -> global namespace -> build-in namespace"的順序進(jìn)行搜索用戶所需元素堂油,并且以第一個(gè)找到此元素的namespace為準(zhǔn)。
路徑搜索
在模塊的導(dǎo)入時(shí)碧绞,需要一個(gè)“路徑搜索”的過程府框,即在文件系統(tǒng)“預(yù)定義區(qū)域”中查找要導(dǎo)入的模塊,如果沒有找到讥邻,將會(huì)返回錯(cuò)誤ImportError迫靖。
搜索路徑是指待查找的一組目錄地址。
路徑搜索是指查找某個(gè)文件的操作兴使。
導(dǎo)入模塊
-
使用import語句導(dǎo)入模塊系宜。
import module # 單個(gè)模塊導(dǎo)入 import module1, module2.... # 多個(gè)模塊導(dǎo)入
-
使用from-import語句導(dǎo)入模塊。
from module import name
-
拓展import語句(as)
from module import name as yourname 可以通過這種方法來替換模塊中的某個(gè)對(duì)象的名稱
注意: import語句導(dǎo)入模塊的方法是加載這一模塊中的全部對(duì)象到你的程序中发魄,而from-import語句簡單地導(dǎo)入你所要使用的具體的對(duì)象盹牧,比較節(jié)省內(nèi)存。
導(dǎo)入順序
建議按照以下順序進(jìn)行導(dǎo)入相關(guān)模塊励幼。
- Python標(biāo)準(zhǔn)庫模塊
- Python第三方模塊
- 應(yīng)用程序自定義模塊
關(guān)于__future__
由于改進(jìn)汰寓、新特性和當(dāng)前特性增強(qiáng),某些變化會(huì)影響到當(dāng)前功能苹粟,為了讓Python程序員為新事物做好準(zhǔn)備有滑,Python實(shí)現(xiàn)了future指令。
可以使用from-import語句導(dǎo)入新特性嵌削。
from __future__ import new_feature
reload()
reload()內(nèi)建函數(shù)可以重新導(dǎo)入一個(gè)已經(jīng)導(dǎo)入的模塊毛好。
reload(module)
這個(gè)方法是模塊的全部導(dǎo)入以及模塊必須成功導(dǎo)入。函數(shù)的參數(shù)是模塊名稱苛秕。