请看问题代码

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

提出问题:

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

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

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

相关文章:

  • 2021-11-17
  • 2022-01-18
  • 2021-12-11
  • 2021-10-03
  • 2021-07-12
  • 2022-12-23
  • 2021-12-09
猜你喜欢
  • 2021-09-18
  • 2022-12-23
  • 2022-12-23
  • 2022-01-06
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案