详解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 相关文章推荐
Windows系统下安装Python的SSH模块教程
Feb 05 Python
Python的gevent框架的入门教程
Apr 29 Python
Python中处理字符串之islower()方法的使用简介
May 19 Python
Python使用gensim计算文档相似性
Apr 10 Python
Python Json序列化与反序列化的示例
Jan 31 Python
python使用response.read()接收json数据的实例
Dec 19 Python
python三引号输出方法
Feb 27 Python
Django forms表单 select下拉框的传值实例
Jul 19 Python
python被修饰的函数消失问题解决(基于wraps函数)
Nov 04 Python
将python安装信息加入注册表的示例
Nov 20 Python
Python基于pandas爬取网页表格数据
May 11 Python
Python爬虫获取豆瓣电影并写入excel
Jul 31 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
php压缩多个CSS为一个css的代码并缓存
2011/04/21 PHP
PHP实现把数字ID转字母ID
2013/08/12 PHP
PHP基于MySQLI函数封装的数据库连接工具类【定义与用法】
2017/08/11 PHP
PHP验证类的封装与使用方法详解
2019/01/10 PHP
jquery的Tooltip插件 qtip使用详细说明
2010/09/08 Javascript
图标线性回归斜着移动到指定的位置
2013/08/16 Javascript
jQuery插件分享之分页插件jqPagination
2014/06/06 Javascript
jQuery表单美化插件jqTransform使用详解
2015/04/12 Javascript
JavaScript创建对象的方式小结(4种方式)
2015/12/17 Javascript
JavaScript的new date等日期函数在safari中遇到的坑
2016/10/24 Javascript
vue中使用iview自定义验证关键词输入框问题及解决方法
2018/03/26 Javascript
使用pm2自动化部署node项目的方法步骤
2019/01/28 Javascript
微信小程序+云开发实现欢迎登录注册
2019/05/24 Javascript
微信小程序调用天气接口并且渲染在页面过程详解
2019/06/24 Javascript
Vue项目中使用better-scroll实现菜单映射功能方法
2019/09/11 Javascript
JavaScript JSON使用原理及注意事项
2020/07/30 Javascript
[04:38]完美世界携手游戏风云打造 卡尔工作室饰品系统篇
2013/04/25 DOTA
[01:20]DOTA2上海特级锦标赛现场采访:谁的ID最受青睐
2016/03/25 DOTA
Python实现针对给定字符串寻找最长非重复子串的方法
2018/04/21 Python
Python使用修饰器进行异常日志记录操作示例
2019/03/19 Python
python 列表、字典和集合的添加和删除操作
2019/12/16 Python
Python参数传递实现过程及原理详解
2020/05/14 Python
HTML5 Canvas之测试浏览器是否支持Canvas的方法
2015/01/01 HTML / CSS
HTML5新增form控件和表单属性实例代码详解
2019/05/15 HTML / CSS
天猫精选:上天猫,就够了
2016/09/21 全球购物
优秀大学生的自我评价
2014/01/16 职场文书
祖国在我心中演讲稿500字
2014/05/04 职场文书
建筑安全责任书范本
2014/07/24 职场文书
《改造我们的学习》心得体会
2014/11/07 职场文书
学生评语集锦
2015/01/04 职场文书
个人股份转让协议书范本
2015/01/28 职场文书
工伤认定行政答辩状
2015/05/22 职场文书
企业廉洁教育心得体会
2016/01/20 职场文书
《神奇的鸟岛》教学反思
2016/02/22 职场文书
学校2016年全国助残日活动总结
2016/04/01 职场文书
如何Python使用re模块实现okenizer
2022/04/30 Python