You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python变量作用域疑问:为何print可访问全局a,a+=2却报错?

Python全局变量访问与自增操作的作用域差异

先看报错的代码示例:

a = 0
def func():
    a += 2
    print(a)
func()
print(a)

执行时会抛出错误:UnboundLocalError: local variable 'a' referenced before assignment

再看正常运行的代码:

a = 0
def func():
    print(a)
func()
print(a)

执行后会依次输出0和0。

核心原因

这是Python的变量作用域解析规则导致的:

  • 当函数内部存在对变量的赋值操作(包括+=这种隐含赋值的复合操作)时,Python解释器会默认该变量是局部变量,优先在函数内部的局部作用域中查找它。
    对于a += 2,它等价于a = a + 2——这里先引用了a,再对它赋值。但解释器已经认定a是局部变量,此时局部作用域里还没定义a,就会抛出"引用前未赋值"的错误。
  • 当函数内部只有对变量的读取操作(比如print(a))时,Python会沿着作用域链向上查找,先找局部,再找全局,最终找到全局作用域中的a,所以能正常运行。

解决方法

如果要让自增操作正常访问全局变量,只需用global关键字在函数内声明该变量为全局变量:

a = 0
def func():
    global a
    a += 2
    print(a)
func()
print(a)

执行后会依次输出2和2。

内容的提问来源于stack exchange,提问作者doofus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 04:45:34