繁体   English   中英

如何在 IDLE 中重新加载 Python 模块?

[英]How to reload Python module in IDLE?

我试图了解我的工作流程如何与 Python 和 IDLE 一起工作。

假设我写了一个 function:

def hello():
    print 'hello!'

我将文件保存为greetings.py 然后在 IDLE 中,我测试 function:

>>> from greetings import *
>>> hello()
hello!

然后我更改程序,并想再次尝试hello() 所以我reload

>>> reload(greetings)
<module 'greetings' from '/path/to/file/greetings.py'>

然而,变化并没有被采纳。 我究竟做错了什么? 如何重新加载更改的模块?

我一直在阅读一些关于 SO 的相关问题,但没有一个答案对我有帮助。

您需要重做这一行:

>>> from greetings import *

在你做之后

>>> reload(greetings)

仅重新加载模块不起作用的原因是因为 * 实际上导入了模块内的所有内容,因此您必须单独重新加载这些内容。 如果您执行以下操作,它将按预期运行:

>>> import greetings
>>> greetings.hello()
hello!

对文件进行更改

>>> reload(greetings)
<module 'greetings' from 'greetings.py'>
>>> greetings.hello()
world!

这是我尝试您的示例时得到的结果(来自新的 Python 交互式会话):

>>> from greetings import *
>>> reload(greetings)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'greetings' is not defined

这表明了问题的根源。 当您使用from greetings import *时,名称greetings不会导入到全局命名空间中。 因此,您不能对其使用reload(greetings)

要解决此问题,请尝试以下操作:

>>> import greetings
>>> greetings.hello()
hello
>>> reload(greetings)
<module 'greetings' from 'greetings.pyc'>
>>> greetings.hello()
hello world

在 windows 上,我使用 shell->Restart shell 或 CTRL+F6 快捷键重新启动并加载最新版本的 mod

IDLE 有一个菜单选择来运行当前文件。 这将通过首先运行您的文件并重新加载它来重新启动 shell。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM