关于 SO 上的重新导入有很多问题和答案,但如果不了解其背后的机制,这一切似乎都非常违反直觉。
如果你导入一个模块,改变内容,然后再次尝试导入,你会发现第二次导入没有效果:
>>> import foo # foo.py contains: bar = 'original'
>>> print foo.bar
original
>>> # edit foo.py and change to: bar = 'changed'
>>> import foo
>>> print foo.bar
original
当我发现reload
:
>>> reload(foo)
>>> print foo.bar
changed
但是,当您从模块导入项目而不导入模块本身时,没有简单的解决方案:
>>> from foo import baz
>>> print baz
original
>>> # change foo.py from baz = 'original' to baz = 'changed'
>>> from foo import baz
>>> print baz
original
>>> reload(foo)
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
reload(foo)
NameError: name 'foo' is not defined
import
当你给它一个新的语句时,为什么 Python 不会更新导入的项目?