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
相关产品推荐
相关产品推荐

