详解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获取指定目录下所有文件名列表的方法
May 20 Python
Python爬虫框架Scrapy实战之批量抓取招聘信息
Aug 07 Python
python 全局变量的import机制介绍
Sep 07 Python
微信跳一跳自动运行python脚本
Jan 08 Python
python实现扫描日志关键字的示例
Apr 28 Python
解决DataFrame排序sort的问题
Jun 07 Python
python pandas中对Series数据进行轴向连接的实例
Jun 08 Python
python+ffmpeg批量去视频开头的方法
Jan 09 Python
python构造函数init实例方法解析
Jan 19 Python
tensorflow 报错unitialized value的解决方法
Feb 06 Python
基于python实现计算两组数据P值
Jul 10 Python
python实现录制全屏和选择区域录屏功能
Feb 05 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
MySql中正则表达式的使用方法描述
2008/07/30 PHP
简单的php文件上传(实例)
2013/10/27 PHP
ThinkPHP实现静态缓存和动态缓存示例代码
2017/05/02 PHP
深入浅析安装PhpStorm并激活的步骤详解
2020/09/17 PHP
让回调函数 showResponse 也带上参数的代码
2007/08/13 Javascript
img的onload的另类用法
2008/01/10 Javascript
jquery scrollTop方法根据滚动像素显示隐藏顶部导航条
2013/05/27 Javascript
使用script的src实现跨域和类似ajax效果
2014/11/10 Javascript
javascript与jquery中的this关键字用法实例分析
2015/12/24 Javascript
js获取当前日期时间及其它日期操作汇总
2016/03/08 Javascript
在Node.js中使用Javascript Generators详解
2016/05/05 Javascript
Express与NodeJs创建服务器的两种方法
2017/02/06 NodeJs
jquery设置css样式的多种方法(总结)
2017/02/21 Javascript
jQuery插件HighCharts绘制2D带有Legend的饼图效果示例【附demo源码下载】
2017/03/10 Javascript
vue实现手机号码抽奖上下滚动动画示例
2017/10/18 Javascript
jquery select插件异步实时搜索实例代码
2017/10/20 jQuery
Python自定义函数定义,参数,调用代码解析
2017/12/27 Python
Python多线程threading和multiprocessing模块实例解析
2018/01/29 Python
python通过tcp发送xml报文的方法
2018/12/28 Python
Python反爬虫技术之防止IP地址被封杀的讲解
2019/01/09 Python
opencv3/python 鼠标响应操作详解
2019/12/11 Python
Python页面加载的等待方式总结
2021/02/28 Python
ZWILLING双立人英国网上商店:德国刀具锅具厨具品牌
2018/05/15 全球购物
介绍一下mysql的日期和时间函数
2013/03/28 面试题
店长助理岗位职责
2013/12/13 职场文书
二年级学生评语大全
2014/04/23 职场文书
中文专业自荐书
2014/06/29 职场文书
党的群众路线教育实践活动自我剖析材料
2014/10/08 职场文书
领导干部“四风”查摆问题个人整改措施
2014/10/28 职场文书
教导主任个人总结
2015/03/03 职场文书
小学六一主持词开场白
2015/05/28 职场文书
地道战观后感300字
2015/06/04 职场文书
python实现高效的遗传算法
2021/04/07 Python
Python绘制分类图的方法
2021/04/20 Python
python for循环赋值问题
2021/06/03 Python
Pytest中skip和skipif的具体使用方法
2021/06/30 Python