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

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

3天內(nèi)不再提示

python中間模塊重載介紹

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

python通過reload重載模塊動態(tài)更新最新代碼。

1.1 reload

用法

import moda
from importlib import reload
reload(moda)

描述

python的reload()函數(shù)需先從importlib導入。

reload**( moda )****:**moda為模塊對象,即需先導入moda才能進行reload。

假設模塊A文件,導入了模塊B和C,那么重載模塊A的時候,不會重載B和C。

需要單獨對中間模塊B和C進行重載。

文件內(nèi)容

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 執(zhí)行下面示例
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 模塊內(nèi)容
a=梯閱線條a
 'testreload' from 'E:\\\\documents\\\\F盤\\\\testreload.py'>
# 未更新中間模塊內(nèi)容
>>> testreload.modb.b
'b'
>>> testreload.modc.c
'c'
# 單獨reload 中間模塊,內(nèi)容更新成功
>>> 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為模塊的屬性,進行重載。

對中間模塊再導入的中間模塊,也調(diào)用此方法進行重載,即遞歸重載。

從而達到自動重載中間模塊。

文件內(nèi)容

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 執(zhí)行下面示例
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’
# 調(diào)用 reload_all 自動重載中間模塊
>>> testreload.reload_all(testreload)
reloading:0testreload(in testreload)
run:E:\\documents\\F盤\\testreload.py
__name__:testreload
# 更新reload的模塊內(nèi)容
a=梯閱線條a
# 展示模塊層級關系,數(shù)字大的為小的中間模塊,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
# 更新中間模塊內(nèi)容
b=bb
reloading:1-modc(in testreload)
run:E:\\documents\\F盤\\modc.py
__name__:modc
c=cc
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 函數(shù)
    +關注

    關注

    3

    文章

    4237

    瀏覽量

    61965
  • 代碼
    +關注

    關注

    30

    文章

    4671

    瀏覽量

    67765
  • python
    +關注

    關注

    53

    文章

    4753

    瀏覽量

    84077
收藏 人收藏

    評論

    相關推薦

    動態(tài)庫封裝成python模塊的方法

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

    python教程之如何使用XlsxWriter模塊創(chuàng)建aexcel表格

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

    Python的函數(shù)文件與模塊的程序說明

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

    Python-模塊與包

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

    python重載運算符init和str介紹

    python模塊都有個內(nèi)置屬性**name**。
    的頭像 發(fā)表于 02-21 10:33 ?609次閱讀

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

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

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

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

    Python的組成和縮進介紹

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

    介紹Python模塊的基礎知識

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

    Python中telnetlib模塊的基本使用

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

    模塊重載的五種方法

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

    Python 重載與重寫的概念

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

    python如何導入模塊

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

    Python智能家居系統(tǒng)代碼介紹

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

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

    開關量模塊控制中間繼電器是一種常見的工業(yè)自動化控制方式。在這篇文章中,我們將介紹開關量模塊的工作原理、中間繼電器的工作原理以及如何使用開關量
    的頭像 發(fā)表于 08-30 14:22 ?210次閱讀