我最近遇到了一些不寻常的行为。
foo.py
a = 0
def bar():
print (a)
控制台:
>>> import foo
>>> foo.bar()
0
>>> foo.a = 10
>>> foo.bar()
10
控制台:
>>> from foo import *
>>> bar()
0
>>> a
0
>>> a = 10
>>> a
10
>>> bar()
0
我推断 import *
实际上创建了 a
的两个副本 - 一个在全局命名空间中,一个在 foo
模块中无法访问。是否在任何地方解释/记录了这种行为?我不知道要搜索什么。
这似乎是 import *
的一个值得注意的意外结果,但出于某种原因,我以前从未见过它被提出来。
最佳答案
在 Python 中没有隐藏命名空间这样的东西,所描述的行为是正常的和预期的行为。
你应该阅读 https://docs.python.org/3/tutorial/modules.html#more-on-modules为了更好地理解全局变量是如何工作的。
关于Python 导入之星创建隐藏命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33904361/