首页 > 解决方案 > Python修改全局变量

问题描述

所以,这有点棘手。

文件1.py

a = None

def set_a():
    global a
    a = 10

文件2.py

from file1 import a, set_a

set_a()
print(a)

输出:

None

为什么 a 的值没有改变?我知道还有其他方法可以更改 a 的值,但为什么这不起作用?

标签: pythonpython-3.ximportglobal-variablesglobal

解决方案


最大的问题是globals实际居住的地方。每个脚本都有自己的globals. 所以globals那 inset_a真的指向file1's 范围:

import file1

file1.set_a()
a
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
file1.a
10

此更改不会持续到您的调用脚本。所以让我们global完全避免。

函数只返回值会更清楚,您可以在调用脚本中命名任何您想要的名称:

# file1.py
def set_a():
    return 10
# file2.py
from file1 import set_a

# this doesn't have any reliance on a name existing
# in any namespaces
a = set_a()

对此问题的普遍共识是尽可能避免使用全局变量,因为它们会使您的代码难以维护。


推荐阅读