您好,登錄后才能下訂單哦!
不管是用import還是用from mmmm import *的方式導入模塊,當程序運行之后,回頭在看那個存儲著mmmm.py文件的目錄中,多了一個文件:
$ ls mmm* mmmm.py mmmm.pyc
在這個目錄下面,除了原來的那個mmmm.py之外,又多了一個mmmm.pyc文件,這個文件不是我寫的,需要用import的過程說起。
import的工作流程
import mmmm,并不是僅僅將mmmm.py這個文件裝載到當前位置(文件內),其實是首先進行了一次運算。當mmmm.py被第一次導入的時候,python首先要對其進行編譯,生成擴展名為.pyc的同名文件,然后才執行mmmm模塊的代碼,創建相應的對象等。就如同把大象裝進冰箱,有三步要執行:
搜索模塊
一般情況下,python會自動的完成模塊搜索過程。但是,在某些情況下,或許會要求程序員來設定搜索路徑。當import一個模塊后,python會按照下面的順序來找那個將要導入的模塊文件
也可以自己編寫.pth文件,里面是有關搜索目錄,保存到這里。比如,打開目錄中的easy-install.pth文件,發現的內容:
搜索就是這么一個過程。這里建議了解即可,不一定非要進行什么設置,在很多情況下,python都是會自動完成的。特別是初學者,暫且不要輕舉妄動。
重載模塊
以mmmm模塊為例。
在一個shell里面,運行了python,并且做了如下操作:
>>> import mmmm >>> mmmm.web 'https://hiekay.github.io'
下面我再打開一個shell,編輯mmmm.py這個文件,對web值進行適當修改:
#!/usr/bin/env python #coding:utf-8 web = "https://hiekay.github.io, I am writing a python book on line. " def my_name(name): print name class pythoner: def __init__(self,lang): self.lang = lang def programmer(self): print "python programmer language is: ",self.lang
保存之后,切換到原來的那個導入了模塊的交互模式:
>>> mmmm.web 'https://hiekay.github.io'
輸出的跟前面的一樣,沒有任何變化,這是為什么呢?
原來,當導入模塊的時候,只會在第一次導入時加載和執行模塊代碼,之后就不會重新加載或重新執行了,如果模塊代碼修改了,但是這里執行的還是修改之前的。
怎么實現代碼修改之后,執行新的呢?一種方式就是退出原來的交互模式,再重新進入,再import mmmm。這種方法有點麻煩。Python提供了另外一個函數——reload函數,能夠實現模塊的重新加載(簡稱重載),重載后模塊代碼重新執行。如下繼續:
>>> reload(mmmm) <module 'mmmm' from 'mmmm.py'> >>> mmmm.web 'https://hiekay.github.io, I am writing a python book on line. '
這下就顯示修改之后的內容了。
特別提醒注意:
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對億速云的支持。如果你想了解更多相關內容請查看下面相關鏈接
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。