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

Python全局/局部变量差异:同名变量引发UnboundLocalError问题咨询

问题分析与解决

先看你的代码:

test=4
def sum1(var):
    print("in function, test",test) 
    var+=1
    test=7
    print("in function, var",var)
    print("in function, test",test)  
sum1(5)
print(test)

出现UnboundLocalError的核心原因是Python的静态作用域解析规则:当函数内部存在对某个变量的赋值操作时,Python会在编译函数阶段就将该变量标记为整个函数范围内的局部变量,而非动态引用全局变量。哪怕赋值语句出现在变量引用之后,第一个print(test)尝试访问的是未初始化的局部test,自然触发错误。

两种解决思路

  1. 修改全局变量:如果需要在函数内修改全局的test,必须用global关键字声明该变量为全局变量:
test=4
def sum1(var):
    global test  # 声明test为全局变量
    print("in function, test",test) 
    var+=1
    test=7
    print("in function, var",var)
    print("in function, test",test)  
sum1(5)
print(test)  # 输出7,全局变量已被修改
  1. 仅读取全局变量:如果只是想读取全局test而不修改,直接删除函数内的test=7赋值语句即可,此时Python会自动引用全局变量:
test=4
def sum1(var):
    print("in function, test",test) 
    var+=1
    print("in function, var",var)
sum1(5)
print(test)  # 输出4,全局变量未被改动

关键知识点

  • Python的作用域判断是编译时静态确定,而非运行时动态查找。
  • 函数内只要存在变量赋值,该变量就默认是局部变量,除非显式用global(或嵌套作用域用nonlocal)声明。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 16:56:03