问题描述
|
我试图了解我的工作流程如何与Python和IDLE一起使用。
假设我写了一个函数:
def hello():
print \'hello!\'
我将文件另存为“ 1”。然后在IDLE中,我测试功能:
>>> 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
, IDLE有一个菜单选择来运行当前文件。这将通过首先运行文件并重新加载来重新启动外壳。
, 在Windows上,我使用shell-> Restart shell或CTRL + F6快捷方式重新启动并加载最新版本的模式