Python重新加载模块的方法

  介绍

这篇文章主要讲解了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重新加载模块的方法有进一步的了解,如果还想学习更多内容,欢迎关注行业资讯频道。

Python重新加载模块的方法