介绍
这篇文章主要讲解了Python重新加载模块的方法,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。
<强>问题强>
你想重新加载已经加载的模块,因为你对其源码进行了修改。
<强>解决方案强>
使用imp.reload()来重新加载先前加载的模块。举个例子:
在祝辞祝辞进口垃圾邮件 在在在进口小鬼 在在在imp.reload(垃圾邮件) & lt;模块& # 39;垃圾邮件# 39;从& # 39;。/spam.py& # 39;比; 祝辞祝辞祝辞
<>强讨论强>
重新加载模块在开发和调试过程中常常很有用。但在生产环境中的代码使用会不安全,因为它并不总是像您期望的那样工作。
重载()擦除了模块底层字典的内容,并通过重新执行模块的源代码来刷新它。模块对象本身的身份保持不变。因此,该操作在程序中所有已经被导入了的地方更新了模块。
尽管如此,重载()没有更新像“从模块导入名称”这样使用导入语句导入的定义。举个例子:
# spam.py def bar (): 打印(& # 39;酒吧# 39;) def神交(): 打印(& # 39;神交# 39;)
现在启动交互式会话:
在祝辞祝辞进口垃圾邮件 在在在从垃圾邮件导入心意相通 在在在spam.bar () 酒吧 在在在欣赏() 心意相通 祝辞祝辞祝辞
不退出Python修改spam.py的源码,将心意相通()函数改成这样:
def神交(): 打印(& # 39;新神交# 39;)
现在回到交互式会话,重新加载模块,尝试下这个实验:
在祝辞祝辞进口小鬼 在在在imp.reload(垃圾邮件) & lt;模块& # 39;垃圾邮件# 39;从& # 39;。/spam.py& # 39;比; 在在在spam.bar () 酒吧 在在在欣赏()#通知老输出 心意相通 在在在spam.grok() #注意新的输出 新的心意相通 祝辞祝辞在
在这个例子中,你看到有2个版本的欣赏()函数被加载。通常来说,这不是你想要的,而是令人头疼的事。
因此,在生产环境中可能需要避免重新加载模块。在交互环境下调试,解释程序并试图弄懂它。
看完上述内容,是不是对Python重新加载模块的方法有进一步的了解,如果还想学习更多内容,欢迎关注行业资讯频道。