python - 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 的值,但为什么这不起作用?
解决方案
最大的问题是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()
对此问题的普遍共识是尽可能避免使用全局变量,因为它们会使您的代码难以维护。
推荐阅读
- javascript - 如何在 JavaScript Discord 机器人中重复代码?
- algorithm - QuickSort - 枢轴始终处于中间位置时的最坏情况输入示例
- windows - 无法在 Windows Server 2012 R2 中移动日志文件
- typescript - VSCode TypeScript 智能感知不是类型缩小
- android - Jetpack Compose 如何删除 EditText/TextField 下划线并保持光标?
- vim - 如何在 vim 可视模式下获取当前光标位置
- r - 为什么 apply() 有时会产生一个列表,而有时会产生一个向量?
- python - 如何处理反序列化的数据结构
- entity-framework-core - DbContext.Database.ExecuteSqlRaw() 的正确语法
- python-3.x - gunicorn 在没有交通的情况下反复杀死工人