
Python编程语言有一套寻找变量的LEGB规则,究竟什么是LEGB呢?让我们详细了解一下。
LEGB中的L代表Local,指的是函数或类方法内部的局部变量。E代表Enclosed,指的是嵌套函数(一个函数包含另一个函数,即闭包)。G代表Global,指的是模块中的全局变量。B代表Built in,指的是Python预留给自己的特殊名称。
LEGB规则就是按照Local -> Enclosed -> Global -> Built in的顺序查找变量。如果一个名称如”name”在局部(Local)命名空间中找不到,Python会在闭包作用域(Enclosed)中查找。如果闭包作用域也找不到,它就会去全局(Global)命名空间寻找。如果全局命名空间也找不到这个名称,Python会在内建(Built-in)命名空间中查找。如果在所有命名空间中都无法找到该名称,就会引发NameError。
举个例子,假设我们有以下的Python代码:
python
str = ‘我是global的str’ 全局变量声明
def outside(): 定义一个名为outside的函数
str = ‘我是outside里的str’ 函数内部局部变量声明
def inside(): 定义嵌套函数inside
str = ‘我是inside的str’ 嵌套函数内部局部变量声明
print(str) 打印变量str的值
inside() 执行嵌套函数inside
outside() 执行外部函数outside
通过注释掉不同的str变量声明,我们可以观察到控制台输出的内容变化,从而深刻体验LEGB规则的工作原理。注意,全部注释后的 “ 是指Python内置的str类。
视频加载中的提示是为了吸引观众注意,与LEGB规则无直接关联。希望以上解释能帮助你更好地理解Python中的LEGB规则。
