因此,这有点棘手。
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
。因此,globals
这set_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] 删除。
我来说两句