加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

LEGB规则是编程语言里必不可少的

发布时间:2021-05-25 13:33:55 所属栏目:编程 来源:互联网
导读:四个浸染域遵循LEGB法则,让我们用一个例子来声名。 importbuiltins builtins.b= builtins g= global def outer (o1,o2= o2 ): e= enclose def inner (i1,i2= i2

四个浸染域遵循LEGB法则,让我们用一个例子来声名。

import builtins 

 

builtins.b = 'builtins' 

g = 'global' 

 

def outer(o1,o2='o2'): 

    e = 'enclose' 

    def inner(i1,i2='i2'): 

        print(i1,i2,o1,o2,e,g,b) 

    return inner  

 

fun = outer('o1')  

fun('i1') 

其输出为 i1 i2 o1 o2 enclose global builtins

可见,在outer函数的嵌套函数inner中的输出语句 print(i1,i2,o1,o2,e,g,b) 是本措施的重点。其详细执行环境如下:

print i1和i2,毫无疑问的局部变量。

print o1和o2,当地浸染域没有,向上查找到outer函数形参。形参也为局部变量,以是该变量现实界说在outer函数内,inner这个内嵌函数外,而inner内部引用了这个变量,以是视为自由变量。

print e,当地浸染域没有,相同上例,视为自由变量。

print g,当地浸染域没有,自由变量浸染域(闭包)没有,一向上溯到全局浸染局找到。

print b,当地浸染域没有,自由变量浸染域(闭包)没有,全局浸染局没有,同等上溯到内置变量空间找到。

至此,LEGB法则呼之欲出:在当地空间探求不到的变量,逐级向上级探求。这里的LEGB别离指代Local,Enclose,Global和Builtin。

在函数中读取和赋值全局变量,在内嵌函数中读取和赋值自由变量,会有一些差异的处所。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读