修改Python模块的常用做法

Cod*_*lus 5 python module reload

我有一个Python模块测试,我想编辑测试并在​​解释器上运行一些测试功能。Python是否会在不重新导入的情况下自动查看我在测试中编辑的功能的差异?这个动作的合适词是什么?

  1. 重新导入/重新加载/重新定义的最佳实践是什么?
  2. 如何有效地做到这一点?(用鼠标突出显示文本然后复制并粘贴似乎效率不高)。

编辑到目前为止,没有任何内容在起作用,因此我将发布更多详细信息:

我的模块中有一个类,称为Test。所以我用了这个说法from test import Test。现在,当我尝试命令时reload(test),解释器告诉我重载是未定义的。如果我这样做,import imp那么imp.reload(test)解释器会告诉我这test是未定义的。这是怎么了?

aba*_*ert 4

我怀疑您正在使用 Python 3,并且所有回答者都假设您正在使用 Python 2。

\n\n

在 Python 3 中,reload已从 移动builtinsimp.

\n\n

所以,答案是:

\n\n
imp.reload(test)\n
Run Code Online (Sandbox Code Playgroud)\n\n

为了将来的参考,如果你正在使用 Python 3,它几乎总是值得一提,除非你知道它不相关,因为许多老前辈(阅读:你的人)想要的答案)将假设 2.7。

\n\n

同时,回到你的主要问题:

\n\n
\n

重新导入/重新加载/重新定义的最佳实践是什么?

\n
\n\n

对于简单的情况,reload()或者imp.reload()正是您想要的。(对于超级简单的情况,复制粘贴\xe2\x80\xa6没有任何问题)

\n\n

bar但是,当您拥有例如类的某个对象foo.Bar然后重新加载时,很容易让自己感到困惑foo。它也不能很好地与 配合使用from foo import *,而这对于交互式会话来说通常很方便。

\n\n

如果您可以启动一个新的解释器会话并导入模块,那就干净多了。如果您需要创建一堆对象来开始使用模块,您可以暂时将它们作为全局变量添加到模块中,或者创建一个定义它们的包装器模块。有些 IDE 可以完成所有这些工作,因此只需按一些加速键序列即可重新启动解释器并重新运行您import和所有设置内容。

\n