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

Python函数访问全局变量疑问:为何Function2触发UnboundLocalError?

Python全局变量读取与修改的差异问题解析

先看你的测试代码:

number = 5

def Function1():
    temp = number
    print(temp)

def Function2():
    number += 1
    print(number)
    
def Function3():
    print(number)
    
Function1() # >>>  5

Function2() #      line 8, in Function2
            #      number += 1
            #      UnboundLocalError: local variable 'number' referenced before assignment

Function3() # >>>  5

核心原因:Python的作用域判定规则

Python对变量的作用域判断逻辑很直接:

  • 当函数内部只读取变量值时,会先在局部作用域查找,找不到就去全局作用域找。所以Function1和Function3能正常读取全局的number,输出5。
  • 但只要函数内部有赋值操作(包括+=、=这类,哪怕是number = number +1这种先读再写的操作),Python会默认这个变量是局部变量,不再去全局作用域查找。

为什么Function2报错?

number +=1本质是number = number +1,这里有赋值动作,Python会把number标记为Function2的局部变量。但执行时,先需要读取number的值来计算number+1,这时候局部的number还没被定义(赋值在读取之后),所以就抛出了UnboundLocalError。

解决办法

在Function2开头用global关键字声明number是全局变量,告诉Python:这个变量我要操作的是全局的那个,不是局部的:

def Function2():
    global number
    number += 1
    print(number)

这样执行时,Python就会直接修改全局的number,不会再把它当成局部变量处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 23:01:09