Python修改全局变量

Jack Feng

因此,这有点棘手。

file1.py

a = None

def set_a():
    global a
    a = 10

file2.py

from file1 import a, set_a

set_a()
print(a)

输出:

None

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

新星

最大的问题是globals实际居住的地方。每个脚本都有自己的脚本globals因此,globalsset_a实际上是指向file1的范围:

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()

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章