必须用global声明才能在函数内重新绑定全局变量,否则赋值会创建局部变量;读取全局变量无需声明,修改可变对象内容也不需global,仅重新赋值变量名时才需要。

必须用 global 声明,否则赋值会创建局部变量,原全局变量不受影响。
为什么直接赋值改不了全局变量
Python 默认在函数内对变量赋值时,会将其视为局部变量。即使同名全局变量已存在,a = 10 这类操作也不会修改它,而是新建一个局部 a。
常见错误现象:
- 函数执行后,全局变量值没变
- 出现
UnboundLocalError: local variable 'x' referenced before assignment(尤其在读取+赋值混合时)
示例:
x = 100
def func():
print(x) # ❌ 报错:UnboundLocalError
x = 200 # 这行让 Python 认为 x 是局部变量
正确写法:用 global 显式声明
只有在函数内真正要「重新绑定」(即赋值)全局变量时,才需要 global。读取(不赋值)全局变量无需声明。
实操建议:
图片提示词生成器?不止如此。 马甲系统 —— 把脑海中的画面,翻译成AI能理解的专业表达。 用得越多,它越懂你:首次需要多问几句确认方向,用久了几乎一说就懂。 用得越多,它越快:缓存机制让后续对话越来越省。 RAG进化:成功案例持续入库,越跑越聪明。 输入「新手指南」查看完整功能介绍
-
global必须出现在函数体顶部附近,且在对该变量赋值之前 - 可一次声明多个:
global a, b, count - 不能在嵌套作用域(如
nonlocal场景)中混用global和nonlocal - 如果只是调用对象的就地方法(如
list.append()),通常不用global—— 因为没重新绑定变量名
示例:
counter = 0
def inc():
global counter
counter += 1 # ✅ 正确:修改全局 counter
<p>inc()
print(counter) # 输出 1
</p>
什么时候其实不需要 global
如果你操作的是可变对象(list、dict、自定义类实例等),且只调用其方法或修改其内容,而非给变量名重新赋值,就不需要 global。
例如:
data = [1, 2, 3]
def add_item():
data.append(4) # ✅ 不需要 global —— 没有给 data 重新赋值
<p>add_item()
print(data) # [1, 2, 3, 4]
</p>
但下面这个就需要:
data = [1, 2, 3]
def reset():
global data
data = [] # ✅ 重新绑定了 data 变量名
最容易被忽略的是:global 解决的是「变量名绑定」问题,不是「对象修改」问题。搞不清这点,就会在该用的时候漏写,或在不该用的时候硬加,反而引发逻辑混乱。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










