python 函数内修改全局变量报错原因

请看问题代码

在这里插入图片描述

提出问题:

  • 本意就该是 先使用全局变量a,再加一 然后赋值给一个定义的局部变量a。 内部是如何运行的,导致解释器不是按照上面的想法去做的呢?

原因一:
(1)这样很容易歧义,对于同一个名字它要么是局部变量,要么是全局变量,不能是兼而有之
(2)解释器的规则是以赋值语句划分,如果一个变量在代码块中被赋值,它就是当前代码块的局部变量;否则看变量是否是外层函数的闭包变量,再看它是否只全局变量,最后看它是否是内建名字空间里的变量
(3) a += 1 是一个典型的赋值语句,因此 a 一定是局部变量。问题在于a还没有赋值完成初始化,就被读取来做加一计算,因此报错

我的理解是:
人的想法可能是,程序逐行执行,然后第一句碰到 a+1 时,找到了全局变量,然后再执行下一句赋值给 一个局部变量a。 是不是因为 解释器事先定义函数时已经确定了,其中名字空间的 变量,发现有a的局部变量被定义, 当下面再执行 这个函数的时候,output(),再进去执行这个函数的这个语句的时候,就会找到 本地的局部变量a ,然后a+1 ,此时不使用全局变量a,所以导致 提是,局部变量a在定义之前被使用

猜你喜欢

转载自blog.csdn.net/pythonstrat/article/details/108470324