ITPub博客

首页 > 应用开发 > Python > 什么是 Python 中的 LEGB 规则?

什么是 Python 中的 LEGB 规则?

原创 Python 作者:mingtian66 时间:2024-10-29 13:20:14 0 删除 编辑

在 Python 中,LEGB 规则定义了查找变量的顺序,即在不同作用域中如何寻找变量的值。LEGB 是以下四个作用域的首字母缩写,查找的优先级从上到下:

    Local (L):局部作用域,即函数内部的变量。
    Enclosing (E):闭包函数的外部函数中定义的变量(嵌套函数)。
    Global (G):全局作用域,指当前模块(文件)级别定义的变量。
    Built-in (B):内建作用域,指 Python 内置模块中定义的变量,比如 len()、sum() 等函数。

当 Python 解释器需要解析一个变量的值时,会按照上述顺序查找。
详细解释每个作用域

    L (Local):首先查找函数内部定义的局部变量。

    E (Enclosing):如果在局部作用域找不到,则查找外部嵌套函数中定义的变量。

    G (Global):如果在局部和闭包作用域都找不到,查找全局作用域中定义的变量(模块级变量)。

    B (Built-in):最后,如果前三个作用域中都找不到,查找 Python 的内建命名空间中的变量(内置函数和异常)。

LEGB 规则示例

python

x = "global"  # 全局作用域

def outer():
    x = "enclosing"  # 闭包作用域

    def inner():
        x = "local"  # 局部作用域
        print(x)  # 输出: local
    
    inner()

outer()

在这个例子中,inner() 函数内部定义了一个局部变量 x,因此 print(x) 输出的是 "local"。如果我们移除 inner() 函数中的 x,解释器会在外层的 outer() 函数中寻找 x,接着是全局作用域,最后才会查找内建作用域。
使用 global 和 nonlocal 关键字

    global:用于声明全局变量,使函数可以修改全局作用域中的变量。
    nonlocal:用于声明闭包作用域中的变量,使嵌套函数可以修改外部函数中的变量。

global 示例

python

x = "global"

def modify_global():
    global x
    x = "modified global"

modify_global()
print(x)  # 输出: modified global

nonlocal 示例

python

def outer():
    x = "enclosing"

    def inner():
        nonlocal x
        x = "modified enclosing"
    
    inner()
    print(x)  # 输出: modified enclosing

outer()

LEGB 规则帮助解释了 Python 中变量的查找顺序,是理解变量作用域和命名空间的重要概念。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70040412/viewspace-3043149/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2024-08-07

  • 博文量
    589
  • 访问量
    603013