Python变量作用域LEGB

本文详细介绍了Python中变量访问的LEGB原则,即Local、Enclosing、Global、Builtin的作用域规则。深入探讨了local()、globals()函数及nonlocal、global关键字的使用,帮助理解Python中变量的作用域。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python访问变量时,有个LEGB原则,也就是说,变量访问时搜索顺序为:Local —>Enclosing—> Global —>Builtin。其实,很多语言也是这样处理的。

简单地说,访问变量时,先在当前作用域找,如果找到了就使用;如果没找到就继续到外层作用域看看有没有,找到了就使用;如果还是没找到就继续到更外层作用域找,如果已经到了最外层作用域了还是实在找不到就看看是不是内置对象,如果也不是,抛出异常。

Python 变量作用域的规则是 LEGB
LEGB含义解释:
L —— Local(function);函数内的名字空间
E —— Enclosing function locals;外部嵌套函数的名字空间(例如closure)
G —— Global(module);函数定义所在模块(文件)的名字空间
B —— Builtin(Python);Python内置模块的名字空间

local()函数
locals() :以字典类型返回当前位置的全部局部变量。

globals()函数
globals() :以字典类型返回当前位置的全部全局变量。

关键字nonlocal
nolocal自内向外依次检索嵌套函数,但不包括全局名字空间;
如果多层嵌套函数存在同名变量,按就近原则处理;
nonlocal不能为外层嵌套函数新建变量;

关键字global
关键字global指向全局名字空间;

参考:
https://blog.youkuaiyun.com/oh5w6hinug43jvrhhb/article/details/78610969
https://www.cnblogs.com/yvivid/p/python_LEGB_1.html
https://blog.youkuaiyun.com/tcy23456/article/details/82752939

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值