python中搜索变量的【LEGB】法则 2020-01-18(未经允许,禁止转载)

【LEGB】法则

L-Local:在本地函数内部搜索变量
E-Enclosing function:在外部嵌套函数(如闭包closure)内部搜索变量
G-Global:在函数定义的模块(即函数定义的.py文件)搜索全局变量
B-Builtin:搜索Python的内建变量

LEGB法则是python搜索变量的法则,举一个例子:

# this is test.py

# G-Global变量x=1
x = 1
def f1():
    # E-Enclosing function变量x=2
    x = 2
    def f2():
        # L-Local变量x=3
        x = 3
        return x
    return f2

在上面的test.py中,真正需要x的地方只有一处——return x
那么,python执行到return x时,就会按照【LEGB】法则搜索这个x变量到底引用了哪一个值

  • 在f2中,搜索到L-Local变量x=3,停止继续向外搜索
  • 若f2中不存在L-Local变量x=3,则继续向外搜索,这时将在外层嵌套函数f1中搜索到E-Enclosing function变量x=2,停止搜索
  • 若f2和f1中都未定义变量x,那么会继续向外搜索该模块下的全局变量,找到G-Global变量x=1
  • 如果LEG都找不到变量,会再去python的B-Builtin变量中找
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、引言 最近在刷leetcode题的时候,遇到一个求最长回文子串的题目,于是,我写了如下的代码: 哎呀,写了两个...
    文哥的学习日记阅读 14,381评论 6 32
  • 1.1.函数定义 1.1.1.定义一个函数 1.1python定义函数用def关键字,一般格式如下 1.2函数名的...
    Rolle_Wang阅读 500评论 0 0
  • 一、缩进 其实从控制流开始就应该讲解缩进了,但好像缩进的范围对函数来说更明显点,就放这里来讲了。Python中,是...
    喔蕾喔蕾喔蕾蕾蕾阅读 1,127评论 0 3
  • 考点1 资本主义发展的两个阶段:自由竞争资本主义和垄断资本主义 考点2 垄断产生的原因 ①可能性:当生产集中发展到...
    黎霜霜阅读 2,782评论 0 0
  • 今天我们开了一个数学会。让我学到了黄金比。更让我学到了数学的神奇。 在以前我学数学的时候,一直认为...
    25昊阅读 652评论 1 3