关于PYTHON作用域的一个问题。

image

第一个能运行,第二个运行报错,求大佬解释 ,感谢

原因

  • 首先,python是有从近到远读取变量机制的,当局部变量没有查询到时,会去查询全局变量,这就是第一组语句能够运行成功的原因。
  • 而当第二组语句中 写下a=a+1的时候,表达式等号左边的a定义了一个局部变量a,导致表达式等号右边的a+1在进行计算时,系统发现已经存在一个局部变量a,所以就会去获取这个局部变量a的值进行计算,但是这个a还并没有赋值,所以导致了报错发生。

解决

  • 可以将a=a+1改为b=a+1,这样就不会生成一个相同名称的局部变量a,系统就回去获取全局变量中的a来进行计算,运行成功


追问一下为啥b找不到

image
你34行的语句中的b已经超过了它本身的作用域

明白了 感谢,但是如果c要取到值的话要怎么操作呢

把你代码中的 c = b + 1 改成:c = test1() + 1就可以了

嗯嗯