在python中的两个文件之间修改全局变量

问题描述 投票:0回答:2

我有两个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,它们是相同的。

我已经调用了两个函数func0func1,为什么全局变量只进行了一次加法?

python global-variables
2个回答
0
投票

首先,不要使用全局变量。其次,模块test1test2都有单独的命名空间。使用对模块test2的显式引用。

import test2
from test2 import func1

def func0():
    print(id(test2.a))
    test2.a += 1

func0()

func1()

print(test2.a)

0
投票

global关键字使其在您当前的模块test1test2中成为全局模块。当执行import时,它将有效地将值复制到本地模块范围。

也许这使它更清楚,因为实际上是发生的情况:

import test2

a = test2.a
a = 123
# what is the value of test2.a? Unchanged, only the local a was changed
© www.soinside.com 2019 - 2024. All rights reserved.