详解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 相关文章推荐
centos系统升级python 2.7.3
Jul 03 Python
在Python中操作字符串之rstrip()方法的使用
May 19 Python
python3.4用循环往mysql5.7中写数据并输出的实现方法
Jun 20 Python
Python 的类、继承和多态详解
Jul 16 Python
Python编程实现二分法和牛顿迭代法求平方根代码
Dec 04 Python
python利用多种方式来统计词频(单词个数)
May 27 Python
python实现登录密码重置简易操作代码
Aug 14 Python
python+django+rest框架配置创建方法
Aug 31 Python
浅谈Tensorflow 动态双向RNN的输出问题
Jan 20 Python
Python使用for生成列表实现过程解析
Sep 22 Python
python实现Thrift服务端的方法
Apr 20 Python
Python 解决空列表.append() 输出为None的问题
May 23 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
DOTA2游戏同人动画《龙之血》导演接受采访
2021/03/05 欧美动漫
层叠菜单的动态生成
2006/10/09 PHP
PHP中spl_autoload_register()和__autoload()区别分析
2014/05/10 PHP
ThinkPHP之N方法实例详解
2014/06/20 PHP
PHP实现求解最长公共子串问题的方法
2017/11/17 PHP
wordpress之js库集合研究介绍
2007/08/17 Javascript
onkeypress字符按键兼容所有浏览器使用介绍
2013/04/24 Javascript
js实现右下角可关闭最小化div(可用于展示推荐内容)
2013/06/24 Javascript
基于NodeJS的前后端分离的思考与实践(一)全栈式开发
2014/09/26 NodeJs
使用js画图之画切线
2015/01/12 Javascript
js判断鼠标位置是否在某个div中的方法
2016/02/26 Javascript
javascript判断firebug是否开启的方法
2016/11/23 Javascript
jQuery中.attr()和.data()的区别分析
2017/09/03 jQuery
Validform验证时可以为空否则按照指定格式验证
2017/10/20 Javascript
webpack常用配置总览(小结)
2019/11/18 Javascript
编写Python的web框架中的Model的教程
2015/04/29 Python
Python数字图像处理之霍夫线变换实现详解
2018/01/12 Python
对python模块中多个类的用法详解
2019/01/10 Python
python修改字典键(key)的方法
2019/08/05 Python
django实现用户注册实例讲解
2019/10/30 Python
python压包的概念及实例详解
2021/02/17 Python
css3的@media属性实现页面响应式布局示例代码
2014/02/10 HTML / CSS
NBA欧洲商店(法国):NBA Europe Store FR
2016/10/19 全球购物
Chicco婴儿用品美国官网:汽车座椅、婴儿推车、高脚椅等
2018/11/05 全球购物
Monica Vinader官网:英国轻奢珠宝品牌
2020/02/05 全球购物
浅谈react路由传参的几种方式
2021/03/23 Javascript
采购主管岗位职责
2014/02/01 职场文书
学生安全教育材料
2014/02/14 职场文书
大学校务公开实施方案
2014/03/31 职场文书
企业指导教师评语
2014/04/28 职场文书
死亡证明书样本说明
2014/10/18 职场文书
公司的力量观后感
2015/06/05 职场文书
严以律己学习心得体会
2016/01/13 职场文书
HAM-2000摩机图
2021/04/22 无线电
python实现图片九宫格分割的示例
2021/04/25 Python
十大最强飞行系宝可梦,BUG燕上榜,第二是飞行系王者
2022/03/18 日漫