浅谈LEGB规则

来源:互联网 发布:otsu算法 编辑:程序博客网 时间:2024/05/22 11:58

LEGB是python的一种规则和限制,要想理解,必须先了解下命名空间和作用域。


命名空间


        命名空间是一个变量的可用范围,变量名在不同命名空间内可相同,但是在同一个命名空间内不能相同。在python中命名空间是用字典来表示的,也就是变量名+映射对象的组合,变量名等同于key,key相同的话无法分辨取值,所以在同一个命名空间内变量名不能一样。


作用域:


变量的作用域就是有效使用范围,python的作用域是静态的,命名空间可以说是作用域的动态展示。


LGB规则(查找规则local-->global-->builtin。)


        在python2.2之前只有三种作用域:

global作用域:对应的global命名空间,一个模块最外层定义的一个作用域。(全局)

local作用域:对应local命名空间,由函数定义的。(函数)

builtin作用域:对应builtin命名空间,python内部定义的最顶层的作用域,在这个作用域里面定义了各种内建函数:open、range、xrange、list等等。(内建)


LEGB规则(查找规则local-->enclosing-->global-->builtin)


python2.2之后引入闭包,简单来说就是函数嵌套函数,内层函数可用外层函数的变量,引入了enclosing(直接外围作用域)概念。



python菜鸟一枚,如有错误,望指正,如能帮你,不胜荣幸!

原创粉丝点击