我最近遇到了一些不寻常的行为。
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 *
的一个值得注意且意外的后果,但出于某种原因,我从未见过有人提到它。
a = 10
这样定义的东西最多也只是在模块级别。 - user2357112import *
是一个不好的想法。 - MattDMoa
,bar
的输出也会改变。bar()
仍将从bar.__globals__
获取a
的值。 - Ashwini Chaudhary