打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Python 模块之 reload

Python 模块的搜索路径是 sys.path 中的路径,其中包含当前目录。在 sys.path 路径中的 python 文件都会被当作模块处理。python 文件中定义的类、函数、变量都在以 python 文件命名的名字空间中,默认不会造成命名冲突。

我们以下图的 autoshutdown.py 文件为例:

当在 python 交互模式 import autoshutdown 模块,会提示找不到该模块。

C:\Users\Administrator> pythonPython 3.8.0 (tags/v3.8.0:fa919fd, Oct 14 2019, 19:37:50) [MSC v.1916 64 bit (AMD64)] on win32Type 'help', 'copyright', 'credits' or 'license' for more information.>>> import sys>>> import os>>> os.getcwd()'C:\\Users\\Administrator'>>> import autoshutdownTraceback (most recent call last): File '<stdin>', line 1, in <module>ModuleNotFoundError: No module named 'autoshutdown'

原因是 autoshutdown.py 不在 sys.path 目录列表中,我们可以将 autoshutdown.py 所在路径加到 sys.path 目录中,再次 import 不再报错。

通过 dir 函数可以获取到模块内的函数或全局变量,同样也可以检查它的 __file__ 变量,从而获取到模块的实际文件名。

>>> sys.path.append(r'd:\gitRepo\autox')>>> import autoshutdown>>> dir(autoshutdown)['ConfigParser', 'MyConf', 'MyLog', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'base_conf', 'cancel', 'conf', 'default_conf', 'log', 'logging_conf', 'main', 'os', 'reboot', 'shutdown', 'shutdown_conf', 'sys', 'time', 'wait']>>> autoshutdown.__file__'d:\\gitRepo\\autox\\autoshutdown.py'>>>

我们在交互模式可以测试模块的函数或类,当代码更新后,可以通过 reload 方法重新加载模块,从而在线更新代码的功能。

比如我们刚开始在代码中没有重载 MyConf 类的 __str__ 方法,在打印时输出的信息不够完整,只能看到一个 object 信息。

>>> sys.path.append(r'd:\gitRepo\autox')>>> from autoshutdown import MyConf>>> conf = MyConf(r'c:\autox\autox.ini')>>> print(conf)<autoshutdown.MyConf object at 0x0000013617D1F820>

我们更新代码后,自定义了 MyConf 对象的输出:

调用 importlib 模块的 reload 方法,重新加载 autoshutdown 模块,重新打印 MyConf 对象,此时对象的自定义输出功能已更新:

>>> from importlib import reload>>> reload(autoshutdown)<module 'autoshutdown' from 'd:\\gitRepo\\autox\\autoshutdown.py'>>> f = r'c:\autox\autox.ini'>>> conf = autoshutdown.MyConf(f)>>> print(conf)# 关机参数:  shutdown_time = 01:30  is_shutdown = True  is_reboot = False  wait_second = 180# 日志参数:  is_off = False  log_dir = c:\autox\logs  prefix = x# 自动更新参数:  url = http://autoupdate.xyz.com  dest = c:\autox

全文完。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Python:模块代码编写要点
python笔记73-动态导入模块import_module 和 重载reload
【Python】Python学习(三)
Python里的string 和 unicode (二)
这是我见过最完整的模块资料!Python有这样的资源,很快就入门!
Python 精要参考(第二版) 第八章 模块和包
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服