python中scope的意思_Python变量scope正确理解含义是什么

globe = 10

def rdOnly():

print globe

big = 50

def rdInner():

print globe

print big

rdInner()

rdOnly()

def wrOnly():

global globe

print globe

globe = 100

print globe

big = 50

def wrInner():

global globe

print globe

globe = 200

print globe

print big

big = 500

print big

wrInner()

wrOnly()

这段代码中, 只读代码始终不会出错, 但是一旦对上层变量赋值或修改, 就会报错, 全局变量可以通过在每一层声明其变量全局性解决, 上层函数的局部变量就没有办法处理了?

求问这种问题如何解决, 以及为什么会发生这种问题, 内在机理是什么?即为什么只读时引用上层变量不会保存, 而修改时就会出现reference before define的问题?

python在执行函数之前,会预先处理函数。在这个过程中,会判断函数里的变量是局部变量,还是全局变量。如果出现赋值语句,比如globe = 200,它就认为globe是这个函数里的局部变量(前提是没有global globe),而不管这个语句出现在哪个位置,之后执行函数时,如果对globe 的操作出现在赋值语句之前,它会认为你这个局部变量还没有定义就开始使用,所以会出现reference before define的问题。而如果没有赋值语句时,它就会认为这个变量的定义不在这个函数里面,之后一切按闭包处理,在你这个例子里,它会向上找globe,找到了就可以正常使用。

解决的话,在每个函数重新声明一个变量,把上层的变量的值赋给它。

玩蛇网文章,转载请注明出处和文章网址:https://www.iplaypy.com/wenda/wd18754.html

相关文章 Recommend

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值