1.1 reload
用法
import moda
from importlib import reload
reload(moda)
描述
python的reload()函數需先從importlib導入。
reload**( moda )****:**moda為模塊對象,即需先導入moda才能進行reload。
假設模塊A文件,導入了模塊B和C,那么重載模塊A的時候,不會重載B和C。
需要單獨對中間模塊B和C進行重載。
文件內容
E**:**\\documents\\F盤\\testreload.py
import os,sys
import modb
import modc
print("run:{}".format(os.path.abspath(__file__)))
print("__name__:{}".format(__name__))
# a='梯閱線條' # 修改前
a='梯閱線條a' # 修改后
print("a={}".format(a))
E**:**\\documents\\F盤\\modb.py
import os,sys
print("run:{}".format(os.path.abspath(__file__)))
print("__name__:{}".format(__name__))
# b='b' # 修改前
b='bb' # 修改后
print("b={}".format(b))
E**:**\\documents\\F盤\\modc.py
import os,sys
print("run:{}".format(os.path.abspath(__file__)))
print("__name__:{}".format(__name__))
# c='c' # 修改前
c='cc' # 修改后
print("c={}".format(c))
示例
# 打開cmd 執行下面示例
E:\\documents\\F盤>python
>>> import testreload
run:E:\\documents\\F盤\\modb.py
__name__:modb
b=b
run:E:\\documents\\F盤\\modc.py
__name__:modc
c=c
run:E:\\documents\\F盤\\testreload.py
__name__:testreload
a=梯閱線條
# 修改a=’梯閱線條a’,b=’bb’,c=’cc’
>>> from importlib import reload
>>> reload(testreload)
run:E:\\documents\\F盤\\testreload.py
__name__:testreload
# 后只更新了reload 模塊內容
a=梯閱線條a
'testreload' from 'E:\\\\documents\\\\F盤\\\\testreload.py'>
# 未更新中間模塊內容
>>> testreload.modb.b
'b'
>>> testreload.modc.c
'c'
# 單獨reload 中間模塊,內容更新成功
>>> reload(testreload.modb)
run:E:\\documents\\F盤\\modb.py
__name__:modb
b=bb
'modb' from 'E:\\\\documents\\\\F盤\\\\modb.py'>
>>> reload(testreload.modc)
run:E:\\documents\\F盤\\modc.py
__name__:modc
c=cc
'modc' from 'E:\\\\documents\\\\F盤\\\\modc.py'>
>>> testreload.modb.b
'bb'
>>> testreload.modc.c
'cc'
>>>
1.2 自動重載中間模塊
描述
通過遍歷模塊屬性字典 dict ,對類型type為模塊的屬性,進行重載。
對中間模塊再導入的中間模塊,也調用此方法進行重載,即遞歸重載。
從而達到自動重載中間模塊。
文件內容
E**:**\\documents\\F盤\\testreload.py
import os,sys
import types
import modb
import modc
from importlib import reload
print("run:{}".format(os.path.abspath(__file__)))
print("__name__:{}".format(__name__))
#a='梯閱線條' # 修改前
a='梯閱線條a' # 修改后
print("a={}".format(a))
def reload_status(mod,lev,lastmod):
print('reloading:'+ str(lev) + '-'*lev + mod.__name__ + '(in {})'.format(lastmod.__name__))
def reload_conv(mod,convd,lev,lastmod):
if not mod in convd:
reload_status(mod,lev,lastmod)
reload(mod)
convd[mod]=None
for attr in mod.__dict__.values():
if type(attr)==types.ModuleType:
reload_conv(attr,convd,lev+1,mod)
def reload_all(*args):
convd={}
for arg in args:
if type(arg)==types.ModuleType:
reload_conv(arg,convd,0,arg)
if __name__ == '__main__':
import testreload
reload_all(testreload)
E**:**\\documents\\F盤\\modb.py
import os,sys
print("run:{}".format(os.path.abspath(__file__)))
print("__name__:{}".format(__name__))
# b='b' # 修改前
b='bb' # 修改后
print("b={}".format(b))
E**:**\\documents\\F盤\\modc.py
import os,sys
print("run:{}".format(os.path.abspath(__file__)))
print("__name__:{}".format(__name__))
# c='c' # 修改前
c='cc' # 修改后
print("c={}".format(c))
示例
# 打開cmd 執行下面示例
E:\\documents\\F盤>python
>>> import testreload
run:E:\\documents\\F盤\\modb.py
__name__:modb
b=b
run:E:\\documents\\F盤\\modc.py
__name__:modc
c=c
run:E:\\documents\\F盤\\testreload.py
__name__:testreload
a=梯閱線條
# 修改a=’梯閱線條a’,b=’bb’,c=’cc’
# 調用 reload_all 自動重載中間模塊
>>> testreload.reload_all(testreload)
reloading:0testreload(in testreload)
run:E:\\documents\\F盤\\testreload.py
__name__:testreload
# 更新reload的模塊內容
a=梯閱線條a
# 展示模塊層級關系,數字大的為小的中間模塊,in 為導入當前模塊的文件模塊
reloading:1-os(in testreload)
reloading:2--abc(in os)
reloading:2--sys(in os)
reloading:2--stat(in os)
reloading:2--ntpath(in os)
reloading:3---genericpath(in ntpath)
reloading:1-types(in testreload)
reloading:1-modb(in testreload)
run:E:\\documents\\F盤\\modb.py
__name__:modb
# 更新中間模塊內容
b=bb
reloading:1-modc(in testreload)
run:E:\\documents\\F盤\\modc.py
__name__:modc
c=cc
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
函數
+關注
關注
3文章
4327瀏覽量
62573 -
代碼
+關注
關注
30文章
4779瀏覽量
68525 -
python
+關注
關注
56文章
4792瀏覽量
84628
發布評論請先 登錄
相關推薦
動態庫封裝成python模塊的方法
之前的文章 將靜態庫封裝成 python 模塊中講解了如何將靜態庫封裝成 python 模塊,靜態庫封裝相對來說還是有點復雜,今天來介紹下動
發表于 07-13 15:24
?644次閱讀
python教程之如何使用XlsxWriter模塊創建aexcel表格
本文檔的主要內容詳細介紹的是python教程之如何使用XlsxWriter模塊創建aexcel表格。
發表于 01-18 17:01
?10次下載
Python的函數文件與模塊的程序說明
“探索Python ” 這一系列的前幾篇文章已為Python 編程新手介紹了幾方面的主題, 包括變量、容器對象和復合語句。本文以這些概念為基礎,構造一個完整的Python 程序。引入了
發表于 09-10 16:06
?2次下載
python模塊屬性及字符串導入模塊介紹
python可以通過點號或字典,獲取模塊屬性。
已經導入的模塊存放在sys.modules字典,通過getattr獲取模塊屬性
python包模塊相對導入from和import介紹1
無包文件**init**.py下,python通過import module導入模塊時,先搜索程序運行主目錄。
程序運行主目錄為運行的py文件所在目錄,而不是執行python.exe時所在目錄。
介紹Python模塊的基礎知識
Python是一種高級編程語言,擁有豐富的庫和模塊。模塊是Python中一個獨立的、可重用的代碼單元,它包含了一組相關的函數、類和變量。
Python中telnetlib模塊的基本使用
telnetlib 是 Python 標準庫中的一個模塊,它提供了 Telnet 協議的客戶端功能。使用 telnetlib 模塊,我們可以在 Python 中編寫腳本來自動化 Tel
模塊重載的五種方法
bar >> > 重載模塊方法一 如果你使用的 python2(記得前面在 foo 文件夾下加一個 __init__.py ),有一
Python 重載與重寫的概念
在上一次的推送 《Python 監控文件事件變化—以音樂高潮提取為例》 中,最后繼承 LoggingEventHandler 類,對 on_created 進行修改的時候,我使用了一個詞叫:重載
python如何導入模塊
。本文將詳細介紹Python中模塊導入的相關知識,并舉例演示常見的導入方式和用法。 首先,我們需要明確一些基本的概念。Python 的模塊可
Python智能家居系統代碼介紹
Python智能家居系統是一種基于Python編程語言開發的智能家居控制系統,在現代家庭中得到了越來越廣泛的應用。本文將詳細介紹Python智能家居系統的代碼實現,包括系統的結構與功能
開關量模塊怎么控制中間繼電器
開關量模塊控制中間繼電器是一種常見的工業自動化控制方式。在這篇文章中,我們將介紹開關量模塊的工作原理、中間繼電器的工作原理以及如何使用開關量
評論