我最近从python 2切换到python 3. Python 3 documentation读取:" 删除了reload()。使用imp.reload()"尽管如此,它并没有真正说明原因。
This问题描述了它现在如何在python 3中完成。有没有人知道为什么它已从内置插件中移除,现在需要 imp 或 importlib 重新加载?在使用交互式提示构建程序时测试程序时,默认情况下重新加载程序非常方便。显然我可以通过做
这样的事情来解决这个问题from imp import reload
每次打开交互式提示测试代码时,它只是另一行代码。这种变化背后的原因是什么?
答案 0 :(得分:6)
reload()
已从内置插件中删除,因为其中一个 Python Regrets Guido在Keynote address at OSCON 2002中表达了(幻灯片6)。请参阅PEP 3100 - Miscellaneous Python 3.0 Plans,其中列出了几个跟踪其起源的更改。
从幻灯片中我可以说他期望exec()
被使用;这肯定涵盖了在编辑器中迭代开发某些代码并在交互式解释器中重新测试它的最常见用法。
然而,在讨论PEP 3121 - Extension Module Initialization and Finalization时,Guido很快发现他错过了这个功能:
是;我不确定是否继续支持模块重新加载 在Py3k与否。如果没有,它应该从PEP中删除,如果是,它 应该指明。
我已经错过了内置的reload(),所以我认为应该保留它 以某种形式。我希望某种形式的重装功能会 保持可用,也许在imp模块的某个地方。
因此,简而言之,reload()
首先被移除,然后当错过时,imp.reload()
被添加。它无论如何都不需要内置,我当然很少使用它。
在Python 3.4 the function was moved到importlib.reload()
。