吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

python中間模塊重載介紹

jf_78858299 ? 來源:梯閱線條 ? 作者:小梯子 ? 2023-02-21 11:16 ? 次閱讀

python通過reload重載模塊動態更新最新代碼。

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

    文章

    4346

    瀏覽量

    62977
  • 代碼
    +關注

    關注

    30

    文章

    4828

    瀏覽量

    69055
  • python
    +關注

    關注

    56

    文章

    4807

    瀏覽量

    85040
收藏 人收藏

    評論

    相關推薦

    動態庫封裝成python模塊的方法

    之前的文章 將靜態庫封裝成 python 模塊中講解了如何將靜態庫封裝成 python 模塊,靜態庫封裝相對來說還是有點復雜,今天來介紹下動
    發表于 07-13 15:24 ?692次閱讀

    python教程之如何使用XlsxWriter模塊創建aexcel表格

    本文檔的主要內容詳細介紹的是python教程之如何使用XlsxWriter模塊創建aexcel表格。
    發表于 01-18 17:01 ?10次下載
    <b class='flag-5'>python</b>教程之如何使用XlsxWriter<b class='flag-5'>模塊</b>創建aexcel表格

    Python的函數文件與模塊的程序說明

    “探索Python ” 這一系列的前幾篇文章已為Python 編程新手介紹了幾方面的主題, 包括變量、容器對象和復合語句。本文以這些概念為基礎,構造一個完整的Python 程序。引入了
    發表于 09-10 16:06 ?2次下載
    <b class='flag-5'>Python</b>的函數文件與<b class='flag-5'>模塊</b>的程序說明

    Python-模塊與包

    模塊Python 程序架構的一個核心概念
    的頭像 發表于 02-16 14:55 ?819次閱讀
    <b class='flag-5'>Python</b>-<b class='flag-5'>模塊</b>與包

    python重載運算符init和str介紹

    python模塊都有個內置屬性**name**。
    的頭像 發表于 02-21 10:33 ?722次閱讀

    python模塊屬性及字符串導入模塊介紹

    python可以通過點號或字典,獲取模塊屬性。 已經導入的模塊存放在sys.modules字典,通過getattr獲取模塊屬性
    的頭像 發表于 02-21 11:27 ?761次閱讀

    python模塊相對導入from和import介紹1

    無包文件**init**.py下,python通過import module導入模塊時,先搜索程序運行主目錄。 程序運行主目錄為運行的py文件所在目錄,而不是執行python.exe時所在目錄。
    的頭像 發表于 02-21 14:15 ?1068次閱讀

    Python的組成和縮進介紹

    1. Python組成和縮進 Python程序由模塊組成。一個模塊對應python源文件,一般后綴名是:.py
    的頭像 發表于 03-05 17:09 ?1812次閱讀
    <b class='flag-5'>Python</b>的組成和縮進<b class='flag-5'>介紹</b>

    介紹Python模塊的基礎知識

    Python是一種高級編程語言,擁有豐富的庫和模塊模塊Python中一個獨立的、可重用的代碼單元,它包含了一組相關的函數、類和變量。
    的頭像 發表于 04-21 16:48 ?1031次閱讀

    Python中telnetlib模塊的基本使用

    telnetlib 是 Python 標準庫中的一個模塊,它提供了 Telnet 協議的客戶端功能。使用 telnetlib 模塊,我們可以在 Python 中編寫腳本來自動化 Tel
    的頭像 發表于 05-04 14:27 ?8243次閱讀

    模塊重載的五種方法

    bar >> > 重載模塊方法一 如果你使用的 python2(記得前面在 foo 文件夾下加一個 __init__.py ),有一
    的頭像 發表于 11-02 10:50 ?376次閱讀

    Python 重載與重寫的概念

    在上一次的推送 《Python 監控文件事件變化—以音樂高潮提取為例》 中,最后繼承 LoggingEventHandler 類,對 on_created 進行修改的時候,我使用了一個詞叫:重載
    的頭像 發表于 11-03 15:13 ?649次閱讀
    <b class='flag-5'>Python</b> <b class='flag-5'>重載</b>與重寫的概念

    python如何導入模塊

    。本文將詳細介紹Python模塊導入的相關知識,并舉例演示常見的導入方式和用法。 首先,我們需要明確一些基本的概念。Python模塊
    的頭像 發表于 11-22 14:46 ?998次閱讀

    Python智能家居系統代碼介紹

    Python智能家居系統是一種基于Python編程語言開發的智能家居控制系統,在現代家庭中得到了越來越廣泛的應用。本文將詳細介紹Python智能家居系統的代碼實現,包括系統的結構與功能
    的頭像 發表于 01-25 09:46 ?1457次閱讀

    開關量模塊怎么控制中間繼電器

    開關量模塊控制中間繼電器是一種常見的工業自動化控制方式。在這篇文章中,我們將介紹開關量模塊的工作原理、中間繼電器的工作原理以及如何使用開關量
    的頭像 發表于 08-30 14:22 ?1278次閱讀
    百家乐官网实战案例| 大西洋百家乐的玩法技巧和规则| 百家乐桌蓝盾在线| 百家乐开户平台| 百家乐平注常赢法| 百家乐官网牌桌订做| 线上百家乐官网网站| 电子百家乐官网打法| 百家乐官网稳赢秘诀教学| 广东百家乐官网扫描分析仪| 澳门百家乐官网洗码提成查询| 澳门百家乐官网怎么看小路 | 钱隆百家乐官网软件| 百家乐官网赌场代理合作| 新澳博娱乐| 百家乐官网网址哪里有| 新百家乐官网.百万筹码| 24山的财位| 在线百家乐技巧| 玩百家乐必赢的心法| 真人游戏视频| 新利娱乐网| 百家乐官网小音箱| 属虎和属鼠合伙做生意| 百家乐智能分析| kk娱乐城送彩金| 现金百家乐官网代理| 塑料百家乐筹码| 娱乐城开户彩金| 百家乐官网送錢平臺| 百家乐平台要多少钱| 新世纪娱乐城信誉怎么样| HG百家乐官网大转轮| 百家乐真人娱乐城陈小春| 皇冠足球| 3U百家乐官网的玩法技巧和规则| 棋牌百家乐有稳赚的方法吗 | 威尼斯人娱乐网可信吗| 浦县| 24山向中那个向最好| 大发888娱乐场下载制度|