这是更新全局变量问题的简化版本—— 在 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
