详解Python函数作用域的LEGB顺序


Posted in Python onMay 14, 2016

本文为大家介绍了Python函数作用域的查找顺序,供大家参考,具体内容如下

1.什么是LEGB?
L:local 函数内部作用域
E:enclosing 函数内部与内嵌函数之间
G:global 全局作用域
B:build-in 内置作用域

2.LEGB是作什么用的?
为什么非要介绍这个呢?或者说它们的作用是什么?
原因是因为我们的在学习Python函数的时候,经常会遇到很多定义域的问题,全部变量,内部变量,内部嵌入的函数,等等,Python是如何查找的呢?以及Python又是按照什么顺序来查找的呢?这里做一个顺序的说明

3.顺序是什么
跟名字一样,Python在函数里面的查找分为4种,称之为LEGB,也正是按照这种顺序来查找的。

首先,是local,先查找函数内部
然后,是enclosing,再查找函数内部与嵌入函数之间(是指在函数内部再次定义一个函数)
其次,是global,查找全局
最后,是build-in,内置作用域

4.举例说明
ex1

passline = 60

def func(val):
  if val >= passline:
    print('pass')
  else:
    print('failed')

func(89)  

'''''''''''' 
pass
[Finished in 0.2s] 
''''''''''''

Python函数首先查找local,在局部变量作用域里并没有passline的定义,然后发现函数内部并没有内嵌函数,这时Python开始查找global,在全局里查找到passline的定义,被调用。

ex2

def Max(val1, val2):
  return max(val1, val2)

print(Max(90, 100))

'''''''''
100
[Finished in 0.1s]
'''''''''

Max函数里面直接调用另外一个函数,调用的max()(注意两个函数的大小写不一样),该函数并没有被定义,但是却属于我们上述的第四种,属于build-in函数,既是在python标准库里的函数,内置的,可以直接调用的。最后一步才会查找到这里

关于第二种,属于内嵌函数,即使在函数里面再次定义一个函数,这时会首先查找local函数里面是否有定义,然后才会查找函数里面内嵌函数里面有没有定义,这一种有专门的名词,叫做闭包,闭包在之前一些文章中都有介绍,希望大家阅读。

以上就是本文的全部内容,希望对大家的学习有所帮助。

Python 相关文章推荐
使用Python生成随机密码的示例分享
Feb 18 Python
pandas.DataFrame选取/排除特定行的方法
Jul 03 Python
使用python list 查找所有匹配元素的位置实例
Jun 11 Python
python之信息加密题目详解
Jun 26 Python
python求平均数、方差、中位数的例子
Aug 22 Python
python多任务之协程的使用详解
Aug 26 Python
python 在threading中如何处理主进程和子线程的关系
Apr 25 Python
Python使用pdb调试代码的技巧
May 03 Python
使用pyecharts1.7进行简单的可视化大全
May 17 Python
python要安装在哪个盘
Jun 15 Python
详解python内置模块urllib
Sep 09 Python
python3排序的实例方法
Oct 20 Python
python爬取51job中hr的邮箱
May 14 #Python
Phantomjs抓取渲染JS后的网页(Python代码)
May 13 #Python
python基于phantomjs实现导入图片
May 13 #Python
Python中遍历字典过程中更改元素导致异常的解决方法
May 12 #Python
Python安装使用命令行交互模块pexpect的基础教程
May 12 #Python
Python下载指定页面上图片的方法
May 12 #Python
Python基于二分查找实现求整数平方根的方法
May 12 #Python
You might like
snoopy PHP版的网络客户端提供本地下载
2008/04/15 PHP
一次因composer错误使用引发的问题与解决
2019/03/06 PHP
PHP 出现 http500 错误的解决方法
2021/03/09 PHP
Jquery 表单验证类介绍与实例
2013/06/09 Javascript
javascript实现节点(div)名称编辑
2014/12/17 Javascript
jQuery事件绑定on()、bind()与delegate() 方法详解
2015/06/03 Javascript
一种Javascript解释ajax返回的json的好方法(推荐)
2016/06/02 Javascript
Actionscript与javascript交互实例程序(修改)
2016/09/22 Javascript
node.js实现的装饰者模式示例
2017/09/06 Javascript
Vue 使用 Mint UI 实现左滑删除效果CellSwipe
2018/04/27 Javascript
详解Webpack-dev-server的proxy用法
2018/09/08 Javascript
ES6 更易于继承的类语法的使用
2019/02/11 Javascript
JS实现马赛克图片效果完整示例
2019/04/13 Javascript
基于Node.js搭建hexo博客过程详解
2019/06/25 Javascript
JavaScript实现的滚动公告特效【基于jQuery】
2019/07/10 jQuery
python使用os模块的os.walk遍历文件夹示例
2014/01/27 Python
Python实现的二维码生成小软件
2014/07/11 Python
python实现梯度下降算法
2020/03/24 Python
使用pandas读取文件的实现
2019/07/31 Python
Python实现队列的方法示例小结【数组,链表】
2020/02/22 Python
PHP基于phpqrcode类库生成二维码过程解析
2020/05/28 Python
基于tensorflow for循环 while循环案例
2020/06/30 Python
keras中epoch,batch,loss,val_loss用法说明
2020/07/02 Python
基于python实现简单C/S模式代码实例
2020/09/14 Python
matplotlib运行时配置(Runtime Configuration,rc)参数rcParams解析
2021/01/05 Python
浅谈CSS3鼠标移入图片动态提示效果(transform)
2017/11/06 HTML / CSS
关于HTML5 Placeholder新标签低版本浏览器下不兼容的问题分析及解决办法
2016/01/27 HTML / CSS
英格兰足协官方商店:England Store
2019/07/12 全球购物
中东最大的在线宠物店:Dubai Pet Food
2020/06/11 全球购物
公司新人试用期自我评价
2014/09/17 职场文书
教师国庆节演讲稿范文2014
2014/09/21 职场文书
公路局群众路线教育实践活动第一阶段工作汇报
2014/10/25 职场文书
2014年单位法制宣传日活动总结
2014/11/01 职场文书
2015年中秋晚会主持词
2015/07/01 职场文书
解决pytorch-gpu 安装失败的记录
2021/05/24 Python
vue报错function () { [native code] },无法出现我们想要的内容 Unknown custom element
2022/04/11 Vue.js