reload()函數將以前置入過的模組再載入一次。重新載入(reload)包括最初匯入模組時應用的分析過程和初始化過程。這樣就允許在不退出解譯器的情況下重新載入已更改的Python模組。
若干注意事項:
1. 如果模組在文法上是正確的,但在初始化過程中失敗,則匯入處理程序不能正確地將模組的名字綁定到符號表中。這時,必須在模組能被重新載入之前使用import()函數載入該模組。
2. 重新載入的模組不刪除最初舊版本模組在符號表中的登記項。
3. 如果一模組利用from。。。import。。。方式從另一模組匯入對象,reload()函數不重新定義匯入的對象,可利用import。。。形式避免這個問題。
4. 提供類的重新載入模組不影響所提供類的任何已存執行個體---已存執行個體將繼續使用原來的方法定義,只有該類的新執行個體使用新格式。這個原則對衍生類別同樣適用。
在python中,每一個以 .py結尾的Python檔案都是一個模組。其他的檔案可以通過匯入一個模組來讀取該模組的內容。匯入從本質上來講,就是載入另一個檔案,並能夠讀取那個檔案的內容。一個模組的內容通過這樣的屬效能夠被外部世界使用。
這種基於模組的方式使模組變成了Python程式架構的一個核心概念。更大的程式往往以多個模組檔案的形式出現,並且匯入了其他模組檔案的工具。其中的一個模組檔案被設計成主檔案,或叫做頂層檔案(就是那個啟動後能夠運行整個程式的檔案)。
預設情況下,模組在第一次被匯入之後,其他的匯入都不再有效。如果此時在另一個視窗中改變並儲存了模組的原始碼檔案,也無法更新該模組。這樣設計的原因在於,匯入是一個開銷很大的操作(匯入必須找到檔案,將其編譯成位元組碼,並且運行代碼),以至於每個檔案、每個程式運行不能夠重複多於一次。
那麼想要使得Python在同一次會話中再次運行檔案,該怎麼辦呢。這就需要調用imp標準庫模組中的reload函數。如下所示
1 |
from imp import reload reload(MyModule) |
這樣就可以重新裝載MyModule模組,使得修改有效。
注意:reload函數希望獲得的參數是一個已經載入了的模組對象的名稱,所以如果在重載之前,請確保已經成功地匯入了這個模組。
說明:Python 3.0把reload內建函數移到了imp標準庫模組中。它仍然像以前一樣重載檔案,但是,必須匯入它才能使用。在Python 3.0中,運行import imp並使用imp.reload(M),或者像上面所示的,運行from imp import並使用reload(M)
機器學習實戰P22頁
>>>reload(KNN)改為
Python 3.5.2中
>>>import importlib
>>>importlib.reload(KNN)
在python2中,reload()是內建函數,能夠直接使用。
但是在python3中,直接使用reload()會報錯,需要從imp中匯入。
用法為
[html] view plain copy print ? >>>from imp import reload >>>reload(xyz)