Python中的作用域规则:最内嵌套作用域规则 和 LEGB

(1)最内嵌套作用域规则:由一个赋值语句引进的名字在这个赋值语句所在的作用域里是可见(起作用)的,而且在其内部嵌套的每个作用域里也可见,除非它被嵌套于内部的,引进同样名字的另一条赋值语句所遮蔽/覆盖。

(2)LEGB:符号表的搜索顺序是Local -> Enclosing Function -> Global -> Built-in

例如(下面实例会出错):

------------------------------------------

>>> x=10
>>> def f():
 ...   print(x)
 ...   x+=1

 
>>> f()
   Traceback (most recent call last):
   File "<pyshell#93>", line 1, in <module>:     f()
   File "<pyshell#92>", line 2, in f :    print(x)
   UnboundLocalError: local variable 'x' referenced before assignment
>>>

---------------------------------------------

为什么会出错呢?

因为在函数f()中出现了变量x+=1,编译器会认为x属于局部变量(local),根据LEGB规则,先搜索local变量,则在print(x)语句时候,局部变量 x还没有赋值,故出现下面提示信息:

 UnboundLocalError: local variable 'x' referenced before assignment

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值