Skip to main content
 首页 » 编程设计

python之如何修改全局变量

2025年05月04日14lonelyxmas

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