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

Python声明global后局部变量会被回退吗?教材与实际运行结果不符疑问

你提供的代码样例:

i=7
def myfunc():
    i=2
    global i
    i=i+3
    print(i)
    print(i)
myfunc()

问题解答

1. 语法报错的原因是Python版本规则差异

你在当前版本运行收到的i is defined before global declaration报错是Python 3.x的正常表现:Python 3强制要求global关键字必须写在函数内所有对该变量的操作之前,先赋值再声明global直接判定为语法错误。
这种写法在已停止维护的Python 2.x版本中属于合法语法,不会抛出报错,你的教材大概率是多年前基于Python 2编写,内容一直没有更新适配现行的Python 3标准。

2. 教材给出的输出和解释完全错误

哪怕在Python 2.x环境下运行这段代码,最终输出也只会是两次10,不可能出现教材给出的10、2的结果,也不存在所谓“global声明的变量会被重新赋值回2”的逻辑:

  • 只要声明了global i,函数内所有对i的操作都会直接作用于全局变量,不存在“回退到局部值”的语法规则
  • 该内容属于典型的教材编写错误,编写者没有实际运行验证过代码,完全基于自己对global的错误认知编造了输出和解释。

3. 这类错误代码大量出现在教材中的原因

面向高中阶段的信息技术教材普遍存在内容更新滞后、审核不严谨的问题,很多错误知识点会连续沿用十几年,部分编写者本身对Python语法细节理解不到位,也不会实际运行验证样例,就会出现这类完全不符合实际运行结果的错误内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 14:45:02