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文章
4331浏览量
62594 -
代码
+关注
关注
30文章
4787浏览量
68589 -
python
+关注
关注
56文章
4796浏览量
84668
发布评论请先 登录
相关推荐
动态库封装成python模块的方法
之前的文章 将静态库封装成 python 模块中讲解了如何将静态库封装成 python 模块,静态库封装相对来说还是有点复杂,今天来介绍下动
发表于 07-13 15:24
•646次阅读
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智能家居系统的代码实现,包括系统的结构与功能
开关量模块怎么控制中间继电器
开关量模块控制中间继电器是一种常见的工业自动化控制方式。在这篇文章中,我们将介绍开关量模块的工作原理、中间继电器的工作原理以及如何使用开关量
评论