详解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冒泡排序算法的实现代码
Nov 21 Python
python中尾递归用法实例详解
Apr 28 Python
Python 专题三 字符串的基础知识
Mar 19 Python
Python 使用PIL numpy 实现拼接图片的示例
May 08 Python
python 列表中[ ]中冒号‘:’的作用
Apr 30 Python
Python Django框架单元测试之文件上传测试示例
May 17 Python
Numpy中对向量、矩阵的使用详解
Oct 29 Python
解决pandas展示数据输出时列名不能对齐的问题
Nov 18 Python
pytorch加载自定义网络权重的实现
Jan 07 Python
python GUI库图形界面开发之PyQt5图片显示控件QPixmap详细使用方法与实例
Feb 27 Python
使用SimpleITK读取和保存NIfTI/DICOM文件实例
Jul 01 Python
python代码实现扫码关注公众号登录的实战
Nov 01 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
全国FM电台频率大全 - 20 广西省
2020/03/11 无线电
用php将任何格式视频转为flv的代码
2009/09/03 PHP
php删除数组元素示例分享
2014/02/17 PHP
php中使用base HTTP验证的方法
2015/04/20 PHP
从刷票了解获得客户端IP的方法
2015/09/21 PHP
PHP获取redis里不存在的6位随机数应用示例【设置24小时过时】
2017/06/07 PHP
php进程daemon化的正确实现方法
2018/09/06 PHP
浅谈laravel-admin form中的数据,在提交后,保存前,获取并进行编辑
2019/10/21 PHP
PHP单元测试配置与使用方法详解
2019/12/27 PHP
深入认识JavaScript中的函数
2007/01/22 Javascript
juqery 学习之三 选择器 子元素与表单
2010/11/25 Javascript
JS字符串累加Array不一定比字符串累加快(根据电脑配置)
2012/05/14 Javascript
JavaScript生成二维码图片小结
2015/12/27 Javascript
基于JavaScript实现动态添加删除表格的行
2016/02/01 Javascript
简单谈谈javascript中this的隐式绑定
2016/02/22 Javascript
基于JS实现省市联动效果代码分享
2016/06/06 Javascript
vuejs2.0子组件改变父组件的数据实例
2017/05/10 Javascript
Vue2.0权限树组件实现代码
2017/08/29 Javascript
浅谈Vue SSR 的 Cookies 问题
2017/11/20 Javascript
vue.js过滤器+ajax实现事件监听及后台php数据交互实例
2018/05/22 Javascript
angular ng-model 无法获取值的处理方法
2018/10/02 Javascript
js拖动滑块和点击水波纹效果实例代码
2018/10/16 Javascript
JS散列表碰撞处理、开链法、HashTable散列示例
2019/02/08 Javascript
Javascript读取上传文件内容/类型/字节数
2019/04/30 Javascript
详解Python中DOM方法的动态性
2015/04/11 Python
Python通过属性手段实现只允许调用一次的示例讲解
2018/04/21 Python
Python使用matplotlib和pandas实现的画图操作【经典示例】
2018/06/13 Python
python实现音乐下载的统计
2018/06/20 Python
python用BeautifulSoup库简单爬虫实例分析
2018/07/30 Python
python入门:argparse浅析 nargs='+'作用
2020/07/12 Python
html5定位并在百度地图上显示的示例
2014/04/27 HTML / CSS
意大利在线高尔夫商店:Online Golf
2021/03/09 全球购物
幼儿园感恩节活动方案
2014/10/06 职场文书
整改落实自查报告
2014/11/05 职场文书
龙猫观后感
2015/06/09 职场文书
Python机器学习之底层实现KNN
2021/06/20 Python