加入收藏 | 设为首页 | 会员中心 | 我要投稿 财气旺网 - 财气网 (https://www.caiqiwang.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

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

发布时间:2022-12-08 11:27:32 所属栏目:语言 来源:
导读:  四个作用域遵循LEGB规则,让我们用一个例子来说明。

  import builtins

  

  builtins.b = 'builtins'

  g = 'global'

  

  def outer(o1,o2='o2&#3

  四个作用域遵循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。
 
  在函数中读取和赋值全局变量,在内嵌函数中读取和赋值自由变量,会有一些不同的地方。

(编辑:财气旺网 - 财气网)

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