详解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基于pygame实现图片代替鼠标移动效果
Nov 11 Python
Python中工作日类库Busines Holiday的介绍与使用
Jul 06 Python
Python编程之微信推送模板消息功能示例
Aug 21 Python
Django处理文件上传File Uploads的实例
May 28 Python
在python中将字符串转为json对象并取值的方法
Dec 31 Python
浅谈PYTHON 关于文件的操作
Mar 19 Python
Django的用户模块与权限系统的示例代码
Jul 24 Python
keras导入weights方式
Jun 12 Python
Python SMTP配置参数并发送邮件
Jun 16 Python
python中id函数运行方式
Jul 03 Python
Python持续监听文件变化代码实例
Jul 22 Python
ubuntu16.04升级Python3.5到Python3.7的方法步骤
Aug 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
php实现可以设置中奖概率的抽奖程序代码分享
2014/01/19 PHP
ThinkPHP3.1新特性之查询条件预处理简介
2014/06/19 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
2018/02/10 PHP
redis+php实现微博(三)微博列表功能详解
2019/09/23 PHP
JS 巧妙获取剪贴板数据 Excel数据的粘贴
2009/07/09 Javascript
Jquery知识点一 Jquery的ready和Dom的onload的区别
2011/01/15 Javascript
javascript面向对象入门基础详细介绍
2012/09/05 Javascript
js 获取坐标 通过JS得到当前焦点(鼠标)的坐标属性
2013/01/04 Javascript
jQuery中:reset选择器用法实例
2015/01/04 Javascript
javascript中in运算符用法分析
2015/04/28 Javascript
AngularJS 路由详解和简单实例
2016/07/28 Javascript
Vue制作Todo List网页
2017/04/26 Javascript
jquery鼠标悬停导航下划线滑出效果
2017/09/29 jQuery
Node.js爬取豆瓣数据实例分析
2018/03/05 Javascript
通过vue-cli3构建一个SSR应用程序的方法
2018/09/13 Javascript
微信小程序实现左滑修改、删除功能
2020/10/19 Javascript
详解处理Vue单页面应用SEO的另一种思路
2018/11/09 Javascript
react ant Design手动设置表单的值操作
2020/10/31 Javascript
利用Python中的mock库对Python代码进行模拟测试
2015/04/16 Python
python处理大数字的方法
2015/05/27 Python
使用python生成目录树
2018/03/29 Python
Python中函数的基本定义与调用及内置函数详解
2019/05/13 Python
python属于跨平台语言码
2020/06/09 Python
pytorch 常用函数 max ,eq说明
2020/06/28 Python
PyCharm2020.1.1与Python3.7.7的安装教程图文详解
2020/08/07 Python
python实现按日期归档文件
2021/01/30 Python
Java里面有没有全局变量?为什么?
2015/02/06 面试题
办公室人员先进事迹
2014/01/27 职场文书
小学生家长评语集锦
2014/01/30 职场文书
“向国旗敬礼”活动策划方案(4篇)
2014/09/27 职场文书
商家认证委托书格式
2014/10/16 职场文书
2015年团支书工作总结
2015/04/03 职场文书
2015年社区卫生工作总结
2015/04/21 职场文书
比赛主持人开场白
2015/05/29 职场文书
唐山大地震观后感
2015/06/05 职场文书
java后台调用接口及处理跨域问题的解决
2022/03/24 Java/Android