L—–local 局部名字空间
E—–enclosing 直接外围空间
G—–global 全局名字空间
B—–builtin 内建名字空间
在 Python 程序中创建、改变或查找变量名时,都是在一个保存变量名的地方进行中,那个地方我们称之为命名空间。作用域这个术语也称之为命名空间。 具体地说,在代码中变量名被赋值(Python 中变量声明即赋值,global 声明的只是变量的使用域)的位置决定了该变量能被访问的范围。函数定义了本地作用域,而模块定义的是全局作用域。这两个作用域之前有如下关系:
-
每一个模块都是全局作用域。也就是说,创建于模块文件顶层的变量具有全局作用域,对于外部访问就成了一个模块对象的属性。
-
全局作用域的作用范围仅限于单个文件。“全局”指的是在一个文件的顶层变量名对于这个文件而言是全局的。
-
每次对函数的调用都创建了一个新的本地作用域。Python 中也有递归,即可以调用自身,每次调用都会创建五个新的本地命名空间。
-
赋值的变量名除非声明为全局变量,否则均为本地变量。如果需要在函数内部对模块文件顶层的变量名赋值,需要在函数内部通过 global 语句声明该变量。
-
所有的变量可归纳为本地、全局或者内置三种。范围分别为 def 内部,在一个模块的命名空间内部和预定义的 __builtin__ 模块提供的变量。
变量名解析:LEGB 原则
如果对以上内容有所迷惑的话,请看以下总结出的几条原则。在函数命名空间中:
变量名引用分为三个作用域进行查找:首先是本地,然后是函数内(如果有的话),之后是全局,最后是内置。
在默认情况下,变量名赋值会创建或者改变本地变量。
全局声明将会给映射到模块文件内部的作用域的变量名赋值。
Python 的变量名解析机制也称为 LEGB 法则,具体如下: 当在函数中使用未确定的变量名时,Python 搜索 4 个作用域:本地作用域(L),之后是上一层嵌套结构中 def 或 lambda 的本地作用域(E),之后是全局作用域(G),最后是内置作用域(B)。按这个查找原则,在第一处找到的地方停止。如果没有找到,Python 会报错的。
分享到:
相关推荐
Python 085.LEGB规则.mp4
《Python灰帽子:黑客与逆向工程师的Python编程之道》
主要介绍了Python变量作用域LEGB用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
python灰帽子:黑客与逆向工程师的Python编程之道{中文版} (Gray.Hat.Python).Justin.Seitz{英文版} python灰帽子:黑客与逆向工程师的Python编程之道{附:源码}
Python 100道经典练习题
学习python的基础练习题。学习完成之后可以基本掌握python语言
Python修炼之道V1.0.pdf
内容概要:使用python 的pygame模块 编写的一个华容道拼图小游戏,另外还使用的模块有 os:用于加载图片文件、random:用于生成随机数组、tkinter :用于窗口美化,弹窗提示
python实现的量化交易策略, 用pandas实现
华容道游戏的python实现,基于pygame库,功能完善,linux、windows都可以运行,已经包含了华容道解密算法,工程没抄别人一句代码,绝不坑人,欢迎下载
详解 Python中LEGB和闭包及装饰器 LEGB L>E>G?B L:local函数内部作用域 E:enclosing函数内部与内嵌函数之间 G:global全局作用域 B:build-in内置作用域 python 闭包 1.Closure:内部函数中对enclosing作用域变量的...
本文为大家介绍了Python函数作用域的查找顺序,供大家参考,具体内容如下 1.什么是LEGB? L:local 函数内部作用域 E:enclosing 函数内部与内嵌函数之间 G:global 全局作用域 B:build-in 内置作用域 2.LEGB是作...
Python 练习题100道
python光看资料是学不会编程的,还需要动手练习python题目,python100道练习题内容非常经典,非常适合python学习和巩固python知识。
Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python面试题及答案共70道Python...
Python面试题及答案共55道Python面试题及答案共55道Python面试题及答案共55道Python面试题及答案共55道Python面试题及答案共55道Python面试题及答案共55道Python面试题及答案共55道Python面试题及答案共55道Python...