我正在努力了解我的工作流程如何与Python和IDLE一起使用。
假设我写了一个函数:
def hello():
print 'hello!'
我将文件保存为greetings.py
。然后在IDLE中,我测试函数:
>>> from greetings import *
>>> hello()
hello!
然后我改变了程序,并希望再次尝试hello()
。所以我reload
:
>>> reload(greetings)
<module 'greetings' from '/path/to/file/greetings.py'>
然而,这种变化并未得到改善。我究竟做错了什么?如何重新加载更改的模块?
我一直在阅读有关SO的一些相关问题,但没有一个答案对我有帮助。
答案 0 :(得分:12)
你需要重做这一行:
>>> from greetings import *
之后
>>> reload(greetings)
重新加载模块的原因不起作用是因为*实际上导入了模块内的所有内容,因此您必须单独重新加载它们。如果您执行了以下操作,它将按预期运行:
>>> import greetings
>>> greetings.hello()
hello!
更改文件
>>> reload(greetings)
<module 'greetings' from 'greetings.py'>
>>> greetings.hello()
world!
答案 1 :(得分:5)
这是我在尝试你的例子时得到的结果(来自一个新的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
答案 2 :(得分:1)
IDLE有一个菜单选择来运行当前文件。这将通过首先运行您的文件重新启动它来重新启动它。
答案 3 :(得分:0)
在Windows上,我使用shell-&gt;重新启动shell或CTRL + F6快捷方式重新启动并加载最新版本的模块