众所周知,python以前的作用域规则为LGB,后来改成了LEGB。
L: local, E: enclosure, G: global, B: builtin
我想L,G,B大家都知道是什么,这个E是python后来引入的一个新的作用域叫嵌套作用域。嵌套作用域和闭包是分不开的,关于闭包,我在另一篇博文中会进行说明
L表示local,我写一个小的Python程序:
def fun():
a=12
return a
局部作用域
这里的fun里面的作用域就是局部作用域,python函数可以嵌套,因此这个局部作用域不像c系列语言的作用域那样单纯了,python的局部作用域可以很里面:-)闭包作用域
python中一切都是对象嘛,所以函数也是一个对象,既然他是一个对象的话,我们就可以把他返回对不对,我写一个小程序:
def fun():
a=12
def innerfun():
print a
return innerfun
这里出现问题了,我们知道innerfun里面是可以引用外层作用域中的局部变量的。如果我们单纯的把这个innerfun返回了,那么我们必须把这个a跟innerfun捆绑起来,不然解释器就无法解释这个a了。跟innerfun捆绑在一块的a所在的作用域就是innerfun的闭包作用域了。
全局作用域
python中一个.py文件是一个模块,这个模块的作用域就是全局作用域。内建作用域
内建作用域个人理解就是那些__doc__,__name__,等等所在的作用域,欢迎前来拍砖