Python函数内先访问同名全局变量后赋值局部变量为何报错?
a=1 def func(): print(a) a=2 func()
运行上述代码抛出错误:
local variable 'a' referenced before assignment
报错原因
Python对函数内变量的作用域判定是函数编译阶段就完成的,不是运行时逐行动态判断的:
- 只要函数内部任意位置出现了对变量
a的赋值操作(此处是a=2这行代码),解释器在编译函数字节码时,就会直接将a标记为该函数的局部变量,整个函数范围内所有对a的访问都会优先查找局部作用域,不会 fallback 到全局作用域查找同名变量。 - 执行到
print(a)时,局部变量a还没有完成赋值,因此直接抛出“局部变量在赋值前被引用”的错误。
如果需要让函数内的a使用全局变量,显式声明即可:
a=1 def func(): global a print(a) a=2 func()
修改后运行会正常输出1,同时全局变量a的值会被修改为2。
内容的提问来源于stack exchange,提问作者chakmeshma
相关产品推荐
相关产品推荐

