模塊除了方法定義,還可以包括可執(zhí)行的代碼。這些代碼一般用來初始化這個模塊。這些代碼只有在第一次被導(dǎo)入時才會被執(zhí)行。
每個模塊有各自獨(dú)立的符號表,在模塊內(nèi)部為所有的函數(shù)當(dāng)作全局符號表來使用。所以,模塊的作者可以放心大膽的在模塊內(nèi)部使用這些全局變量,而不用擔(dān)心把
其他用戶的全局變量搞混。從另一個方面,當(dāng)你確實(shí)知道你在做什么的話,你也可以通過 modname.itemname 這樣的表示法來訪問模塊內(nèi)的函數(shù)。
模塊是可以導(dǎo)入其他模塊的。在一個模塊(或者腳本,或者其他地方)的最前面使用 import 來導(dǎo)入一個模塊,當(dāng)然這只是一個慣例,而不是強(qiáng)制的。被導(dǎo)入的模
塊的名稱將被放入當(dāng)前操作的模塊的符號表中。
還有一種導(dǎo)入的方法,可以使用 import 直接把模塊內(nèi)(函數(shù),變量的)名稱導(dǎo)入到當(dāng)前操作模塊。比如:
這種導(dǎo)入的方法不會把被導(dǎo)入的模塊的名稱放在當(dāng)前的字符表中(所以在這個例子里面,fibo 這個名稱是沒有定義的)。
這還有一種方法,可以一次性的把模塊中的所有(函數(shù),變量)名稱都導(dǎo)入到當(dāng)前模塊的字符表:
這將把所有的名字都導(dǎo)入進(jìn)來,但是那些由單一下劃線(_)開頭的名字不在此例。大多數(shù)情況, python程序員不使用這種方法,因?yàn)橐氲钠渌鼇碓吹拿?br>很可能覆蓋了已有的定義。
__name__屬性
一個模塊被另一個程序第一次引入時,其主程序?qū)⑦\(yùn)行。如果我們想在模塊被引入時,模塊中的某一程序塊不執(zhí)行,我們可以用__name__屬性來使該程序塊僅在
該模塊自身運(yùn)行時執(zhí)行。
運(yùn)行輸出如下:
說明:每個模塊都有一個__name__屬性,當(dāng)其值是\\\’__main__\\\’時,表明該模塊自身在運(yùn)行,否則是被引入。
說明:__name__ 與 __main__ 底下是雙下劃線, _ _ 是這樣去掉中間的那個空格。