我有两个python文件:首先test2.py
:
a = 1
def func1():
global a
print(id(a))
a += 1
然后test1.py
:
from test2 import a, func1
def func0():
global a
print(id(a))
a += 1
func0()
func1()
print(a)
事实证明,如果我运行test1.py
,结果将是2,而不是我认为应该的3。我在两个函数中检查a
的ID,它们是相同的。
我已经调用了两个函数func0
和func1
,为什么全局变量只进行了一次加法?
首先,不要使用全局变量。其次,模块test1
和test2
都有单独的命名空间。使用对模块test2
的显式引用。
import test2
from test2 import func1
def func0():
print(id(test2.a))
test2.a += 1
func0()
func1()
print(test2.a)
global
关键字使其在您当前的模块test1
和test2
中成为全局模块。当执行import
时,它将有效地将值复制到本地模块范围。
也许这使它更清楚,因为实际上是发生的情况:
import test2
a = test2.a
a = 123
# what is the value of test2.a? Unchanged, only the local a was changed