Python 变量作用域 —— 命名空间与 LEGB 规则
来源:互联网 发布:自考网络辅导 编辑:程序博客网 时间:2024/05/22 13:51
一、命名空间
白话一点讲:命名空间是对变量名的分组划分。
不同组的相同名称的变量视为两个独立的变量,因此隶属于不同分组(即命名空间)的变量名可以重复。
命名空间可以存在多个,使用命名空间,表示在该命名空间中查找当前名称。
二、 LEGB 原则
LEGB含义解释:
L-Local(function);函数内的名字空间
E-Enclosing function locals;外部嵌套函数的名字空间(例如closure)
G-Global(module);函数定义所在模块(文件)的名字空间
B-Builtin(Python);Python内置模块的名字空间
LEGB规定了查找一个名称的顺序为:local–>enclosing function locals–global–>builtin
In [1]: x=1In [2]: def foo(): ...: x=2 ...: def inner_foo(): ...: x=3 ...: print('locals:',x) ...: inner_foo() ...: print('enclosing function locals:',x) ...:In [3]: foo()locals: 3enclosing function locals: 2In [4]: print('global:',x)global: 1
稍加改动
In [5]: x=1In [6]: def foo(): ...: x=2 ...: def inner_foo(): ...: # x=3 ...: print('locals:',x) ...: inner_foo() ...: print('enclosing function locals:',x) ...:In [7]:In [7]: foo()locals: 2enclosing function locals: 2In [8]: print('global',x)global 1
可以发现:当注释掉x = 3
以后,函数innerfoo
内部查找到的x是x = 2
。
在上述两个例子中,从内到外,依次形成四个命名空间:
def innerfoo():
:Local
, 即函数内部命名空间;def foo():
:Enclosing function locals
;外部嵌套函数的名字空间module
(文件本身):Global(module)
;函数定义所在模块(文件)的名字空间Python内置模块
的名字空间:Builtin
x = 3
属于函数内部命名空间,当被注释掉之后,函数innerfoo
内部通过print x
使用x这个名称时,触发了名称查找动作。
首先在Local命名空间
查找,没有找到,然后到Enclosing function locals命名空间
查找,查找成功,然后调用。
参考资料:
Python LEGB规则
0 0
- Python 变量作用域 —— 命名空间与 LEGB 规则
- Python 命名空间和LEGB规则
- Python 的变量作用域和 LEGB 原则
- Python 的变量作用域和 LEGB 原则
- Python 的变量作用域和 LEGB 原则
- Python基本语法_变量作用域LEGB
- Python中的作用域规则:最内嵌套作用域规则 和 LEGB
- Python中的变量有作用域或命名空间及locals()与globals()函数
- Python中的LEGB规则
- python中的LEGB 规则
- Python中的LEGB规则
- python函数作用域以及LEGB原则
- python 变量 命名规则
- Python变量命名规则
- python变量命名规则
- javascript变量、作用域、命名空间
- javascript 变量、作用域、命名空间、this
- LEGB作用域
- Java中hashCode的作用
- 设计模式概论
- mybatis多个参数 判断非空
- oracle查询所有表的所有字段包含指定关键字且替换为指定关键字
- 数据库查询结果分页显示思路
- Python 变量作用域 —— 命名空间与 LEGB 规则
- 在dos系统,进入MySQL,操作
- Problem I: 大整数的加法运算
- 解释器模式
- H5全屏轮播图如何居中显示图片不拉伸
- 微信小程序关于函数调用的小坑
- 九度题目1087:约数的个数
- JAVA笔试题(1)
- 命令模式