中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python之reload流程實例代碼解析

發布時間:2020-10-16 19:53:18 來源:腳本之家 閱讀:140 作者:spirit_djy 欄目:開發技術

本文研究的主要是Python之reload流程的相關內容,具體如下。

在Python中,reload() 用于重新載入之前載入的模塊。

reload() 函數語法:

reload(module)

Python中 import 只執行一次,后續的 import 僅僅在 sys.modules 中查找是否存在對應的模塊對象,而對于源文件進行修改后想要立即重新導入該文件而不想整體重新執行程序時, reload 就在該處派上用途了。在實際中,測試代碼修改結果,或者對于不能停止的服務需要動態改變運行行為 reload 是非常有用的。

reload 的執行流程如下所示:

1)在 sys.modules 中查找到對應模塊名的模塊對象;

2)針對該模塊名的 執行文件 屬性,找到對應文件并重新編譯該文件執行;

3)將代碼執行中產生的對象依次更新到原模塊對象的屬性中;

從上面執行流程中我們可以看到如下幾點:

1)模塊對象是可變的,在 reload 執行過程中只是修改了該模塊對象,因此在 reload 后原來的引用還是指向該模塊對象;

2)reload 過程中,文件中代碼重新執行,創建新的對象并綁定到模塊的屬性中;

3)reload 模塊中的 import 和 reload 流程與該模塊是否 reload 無關,一個模塊 reload 并不會導致其中的 import 遞歸重新載入;

4)對于 from * import * 來說其相當于是在本地創建了同名的變量指向模塊中的同名屬性所引用對象, reload 會創建新對象(部分不可變對象除外),其仍然指向舊變量,一般情況下需要重新賦值;

基于此,測試如下代碼:

#----- 被導入代碼 reloadImported.py ------ 
print(' excute code in imported file') 
x = [] 
y = 1 
 
#----- 測試代碼 test.py -------- 
sep = ': ' 
print('---- import module ----') 
import reloadImported 
from reloadImported import x 
print(' id(reloadImported)', id(reloadImported), sep=sep) 
print(' id(reloadImported.x)', id(reloadImported.x), sep=sep) 
print(' id(reloadImported.y)', id(reloadImported.y), sep=sep) 
print(' id(x)', id(x), sep=sep) 
 
print('---- reload module ----') 
from importlib import reload 
reload(reloadImported) 
print(' id(reloadImported)', id(reloadImported), sep=sep) 
print(' id(reloadImported.x)', id(reloadImported.x), sep=sep) 
print(' id(reloadImported.y)', id(reloadImported.y), sep=sep) 
print(' id(x)', id(x), sep=sep) 
from reloadImported import x 
print(' new x id(x)', id(x), sep=sep) 

執行結果如下所示:

---- import module ---- 
 excute code in imported file 
 id(reloadImported): 30322880 
 id(reloadImported.x): 29841208 
 id(reloadImported.y): 1502597584 
 id(x): 29841208 
---- reload module ---- 
 excute code in imported file 
 id(reloadImported): 30322880 
 id(reloadImported.x): 29842088 
 id(reloadImported.y): 1502597584 
 id(x): 29841208 
 new x id(x): 29842088 

總結

以上就是本文關于Python之reload流程實例代碼解析的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

吉木萨尔县| 和龙市| 柯坪县| 乐至县| 栾城县| 黄龙县| 恩平市| 沾益县| 宁城县| 信宜市| 若羌县| 慈溪市| 江油市| 松阳县| 祁东县| 晋中市| 钟山县| 阆中市| 新龙县| 民乐县| 哈密市| 北辰区| 海晏县| 饶阳县| 常州市| 邮箱| 沁源县| 怀柔区| 翼城县| 吉木乃县| 泾川县| 扶绥县| 扎鲁特旗| 吕梁市| 五峰| 和平县| 瓦房店市| 广南县| 海阳市| 剑河县| 浮梁县|