美文网首页
python中搜索变量的【LEGB】法则 2020-01-18(

python中搜索变量的【LEGB】法则 2020-01-18(

作者: 9_SooHyun | 来源:发表于2020-01-18 17:35 被阅读0次

    【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变量中找

    相关文章

      网友评论

          本文标题:python中搜索变量的【LEGB】法则 2020-01-18(

          本文链接:https://www.haomeiwen.com/subject/yhakzctx.html