📜  Python中的范围解析 | LEGB 规则(1)

📅  最后修改于: 2023-12-03 15:19:31.282000             🧑  作者: Mango

Python中的范围解析 | LEGB 规则

在Python中,LEGB规则是指变量的查找顺序。LEGB是一个缩写词,分别代表Local、Enclosing、Global和Built-in四个作用域。

  • Local(局部作用域):指定在函数内部定义的变量,只在该函数内部有效。

  • Enclosing(闭合作用域):指在嵌套函数中外层函数的命名空间。

  • Global(全局作用域):指从程序运行开始就存在的变量,全局作用域可以在任意函数内部被访问。

  • Built-in(内置作用域):指包含Python内置函数和变量的模块,可以在程序的任意位置访问。

以下是LEGB规则的示例代码,可以帮助程序员更好地理解该规则:

# 全局变量
a = 'global'

def outer():
    # 闭合作用域
    b = 'outer'

    def inner():
        # 局部作用域
        c = 'inner'
        print(c)  # inner
        print(b)  # outer
        print(a)  # global

    inner()

outer()

print(a)  # global

上面的代码中我们定义了一个全局变量a,然后在outer()函数中定义了一个闭合作用域的变量binner()函数则定义了一个局部作用域的变量c

运行程序,输出结果为:

inner
outer
global
global

从打印结果中可以看出,LEGB规则是按照从内到外的顺序进行变量查找的。在inner()函数中,程序首先查找局部变量c,找到后打印该变量的值,并继续查找闭合作用域的变量b和全局变量a。最后,在调用outer()函数之后,程序又查找到全局变量a并打印其值。