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 "", line 1, in :     f()
   File "", 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

你可能感兴趣的:(Python,--,python语法)