这是更新全局变量的简化版本-
在test.py
中,我有:
k1 = 1
def set_v(k, v):
if k in globals():
globals()[k] = v;
read_v()
def read_v():
print("after {}".format(k1))
执行以下操作后,代码将从python解释器运行:
from test.py import *
产生...
>>> k1
1
>>> set_v('k1',2)
after 2
>>> set_v('k1',3)
after 3
>>> k1
1
我无法理解这一点。
k1
具有全局范围,因为read_v()
在全局dict
中看到它。为什么全局
k1
对于解释器可见而不被更改?我尝试过
setattr(module, var, val)
...但是这没什么不同。 最佳答案
Python中的全局变量仅在模块内是全局变量。
如果要在导入的模块中修改全局,则需要使用module.variable
访问它。
在您的测试环境中,这意味着:
import test.py as test
from test.py import *
print(test.k1)
set_v('k1',2)
set_v('k1',3)
print(test.k1)
输出:
1
after 2
after 3
3
关于python - 如何修改全局变量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45119612/