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

请看问题代码

在这里插入图片描述

提出问题:

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值