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

10-11 01:09