1意推、當(dāng)你在交互解釋器中,import一個模塊后珊蟀,再次import這個模塊是不生效的菊值,因為導(dǎo)入模塊是一個開銷很大的操作,以至于每個程序運行不能重復(fù)多余一次育灸。所以當(dāng)你成功import一個模塊后腻窒,然后再修改這個模塊的代碼并保存即使再import是不會在當(dāng)前會話下生效的,如果想再次運行這個文件磅崭,就得使用reload函數(shù)儿子,這樣就保證在修改并保存后會發(fā)生變化。這里script.py文件就一句打印語句輸出11砸喻,然后成功導(dǎo)入后我改成12.
2柔逼、在3.0中,reload是imp模塊內(nèi)的一個函數(shù)割岛,必須導(dǎo)入imp模塊才能使用愉适,并且reload函數(shù)的參數(shù)是模塊名。(在2.6中癣漆,reload是內(nèi)置函數(shù)儡毕,直接在終端調(diào)用就行,不需要導(dǎo)入imp和reload。)腰湾,還有就是reload函數(shù)的參數(shù)的模塊必須是之前成功導(dǎo)入的雷恃。我們再開一個終端
可以發(fā)現(xiàn)在reload之前沒有import這個script模塊,所以會報錯费坊。
3倒槐、模塊相當(dāng)于一個’對象‘,模塊里的變量就相當(dāng)于模塊的屬性附井,獲取屬性讨越,可以通過import把模塊整體導(dǎo)入,然后使用模塊名再跟一個屬性名永毅,第二種是可以from從模塊中獲取變量名把跨,但是這是復(fù)制的變量名。查看模塊里所有的變量可以用dir函數(shù)沼死,參數(shù)是模塊名着逐,返回一個列表。
4意蛀、reload是不可傳遞的耸别,重載一個模塊之后只會重載這個模塊,而不會重載該模塊導(dǎo)入的其他模塊县钥,所以有時候要重載很多模塊秀姐。
我們再寫一個script2.py的模塊里面
#script2.py
import script
a = '123s'
def fun():
script.fun()
#script.py`
#print(12)
def fun():
print('hi')
然后我們再修改script.py打印hi變成hello,再重載script2.py
可以看到輸出還是hi若贮。
4省有、from導(dǎo)入不同模塊的同一變量名,那么在該模塊中會使用哪個模塊的變量呢谴麦?
#a.py
a = 1
#b.py
a = 2
#c.py
from a import a
from b import a
print(a)
輸出:
2
把from兩句前后換一下蠢沿,輸出就變成了1。
5细移、exec和from一樣搏予,缺點是當(dāng)前正在使用的變量有潛在的默認(rèn)覆蓋的可能
a = 12
exec(open('a.py').read())
a
1
6熊锭、import每個進(jìn)程只運行文件一次弧轧,并且它會把文件生成的到一個單獨的模塊名稱空間中,以便它的賦值不會改變你的作用域中的變量碗殷,但是缺點就是每次修改源碼之后需要重載精绎。
早上在圖書館看到這書就看了一點,覺得還不錯锌妻,畢竟看廖老師的教程不夠全面代乃,很多都沒涉及,所以還是希望全面了解python,所以選了這本搁吓。還有今天廖老師的實戰(zhàn)第一天環(huán)境配置比較簡單就沒記筆記了原茅。最后推薦一首周筆暢的對嘴。