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

为何第二个Python示例中全局变量x失效,出现“局部变量x赋值前引用”错误?

为什么两个Python示例运行结果不同?

示例1代码(正常输出1)

def num():
    global x
    x = 1

def test():
    print(x)

num()        
test()

示例2代码(报错:Local Variable 'x' referenced before assignment)

def num():
    global x
    x = 1

def test():
    while x < 10:
        print(x)
        x+=1
num()
test()

原因解释

Python的变量作用域遵循以下核心规则:

  • 当函数内部仅读取变量时,会优先查找局部作用域的变量,找不到则向上查找全局作用域的变量。
  • 当函数内部对变量进行赋值操作(包括x+=1这种复合赋值,本质是x = x + 1,属于赋值行为),Python会默认这个变量是局部变量,除非你用global关键字显式声明它是全局变量。

对两个示例的具体分析

  1. 示例1:test函数里只有print(x),属于单纯的读取操作。num()已经通过global声明把全局变量x赋值为1,所以test会直接读取全局的x,正常输出1。
  2. 示例2:test函数里有x+=1的赋值操作,Python会自动把x判定为test的局部变量。但在while x <10这一行,程序先引用了这个还未定义的局部x,就触发了“局部变量在赋值前被引用”的错误。如果要修复,只需在test函数开头加上global x声明,告诉Python这个x是全局变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 13:01:16