详解Python匿名函数(lambda函数)


Posted in Python onApril 19, 2019

匿名函数lambda

Python使用lambda关键字创造匿名函数。所谓匿名,意即不再使用def语句这样标准的形式定义一个函数。这种语句的目的是由于性能的原因,在调用时绕过函数的栈分配。其语法是:

lambda [arg1[, arg2, ... argN]]: expression

其中,参数是可选的,如果使用参数的话,参数通常也会在表达式之中出现。

下面举例来说明lambda语句的使用方法(无参数)。

# 使用def定义函数的方法
def true():
  return True

#等价的lambda表达式
>>> lambda :True
<function <lambda> at 0x0000000001E42518>

# 保留lambda对象到变量中,以便随时调用
>>> true = lambda :True
>>> true()
True

下面再举一个带参数的例子。

# 使用def定义的函数
def add( x, y ):
  return x + y

# 使用lambda的表达式
lambda x, y: x + y

# lambda也允许有默认值和使用变长参数
lambda x, y = 2: x + y
lambda *z: z

# 调用lambda函数
>>> a = lambda x, y: x + y
>>> a( 1, 3 )
4
>>> b = lambda x, y = 2: x + y
>>> b( 1 )
3
>>> b( 1, 3 )
4
>>> c = lambda *z: z
>>> c( 10, 'test')
(10, 'test')

但由于lambda表达式特殊的设计,在特定的场景中也带来了一些不同的体验。

lambda是一个表达式,不是一个语句 这就使它能够出现在一些def不能出现的地方,比如,列表常量中。

lambda是单个的表达式,不是一个代码块 lambda的设计是为了满足简单函数的场景,仅能封装有限的逻辑,有复杂逻辑的情况有def来处理,所以lambda的功能要比def小的多。

另外,lambda表达式是可以嵌套的

>>> action = (lambda x : (lambda y : x + y))
>>> a = action(10)
>>> a(5)
15

这就是一个用lambda实现的闭包,与普通闭包一样,内嵌lambda表达式可以获得上层lambda函数的变量。

匿名函数的使用

匿名函数通常被用作高阶函数(higher-order function,参数为函数的函数)的参数。比如,几个内置函数:filter(),map(),reduce()。下面我们分别看看这几个函数的用法及达到相同效果的python另一种特征的用法

filter函数

>>> list = [1, 2, 3]
>>> result = filter(lambda x: x%2==0, list)
>>> result
[2]
>>> result = [x for x in list if x%2==0]
>>> result
[2]

map函数

>>> result = map(lambda x: x*2, list)
>>> result
[2, 4, 6]
>>> result = [x*2 for x in list]
>>> result
[2, 4, 6]

reduce函数

>>> result = reduce(lambda x, y: x+y,list)
>>> result
6
>>> result = sum(list)
>>> result
6

除reduce函数的替代用法比较特殊外,map和filter函数都可以使用列表推导式(list comprehension)代替。据说,当年lambda是一个Lisp程序员给python加的,而Guido是强烈反对的,他中意的是列表推导式。

跳转表(jump table)

lambda的另一种用法是用来编写跳转表,也就是行为列表或字典,能按需执行特定的动作。

>>> key = "get"
>>> {"abc":(lambda : 2 + 2),"bcd" : (lambda : 3 + 3), "get" : (lambda : 4 + 4)}[key]()
8

这样在字典中,每个lambda都留下了一个后续可以调用的函数,通过索引可以取出来,并调用。这就使字段可以成为更加通用的多路分支工具。

以上所述是小编给大家介绍的Python匿名函数(lambda函数)详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
Python的Django框架中的Context使用
Jul 15 Python
举例讲解Python设计模式编程的代理模式与抽象工厂模式
Jan 16 Python
关于Python面向对象编程的知识点总结
Feb 14 Python
深入flask之异步非堵塞实现代码示例
Jul 31 Python
Python判断一个三位数是否为水仙花数的示例
Nov 13 Python
python读取各种文件数据方法解析
Dec 29 Python
pycharm sciview的图片另存为操作
Jun 01 Python
Python如何转换字符串大小写
Jun 04 Python
Python爬虫实例——爬取美团美食数据
Jul 15 Python
Python实现自动签到脚本功能
Aug 20 Python
python统计mysql数据量变化并调用接口告警的示例代码
Sep 21 Python
python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析
Apr 14 Python
解决python3中的requests解析中文页面出现乱码问题
Apr 19 #Python
Python3中列表list合并的四种方法
Apr 19 #Python
局域网内python socket实现windows与linux间的消息传送
Apr 19 #Python
python定时按日期备份MySQL数据并压缩
Apr 19 #Python
Python实现 版本号对比功能的实例代码
Apr 18 #Python
Python网络爬虫之爬取微博热搜
Apr 18 #Python
python学习——内置函数、数据结构、标准库的技巧(推荐)
Apr 18 #Python
You might like
PHP COOKIE及时生效的方法介绍
2014/02/14 PHP
PHP实现一维数组转二维数组的方法
2015/02/25 PHP
php限制上传文件类型并保存上传文件的方法
2015/03/13 PHP
php使用指定字符列表生成随机字符串的方法
2015/04/18 PHP
PHP使用fopen与file_get_contents读取文件实例分享
2016/03/04 PHP
php 判断过去离现在几年的函数(实例代码)
2016/11/15 PHP
Laravel框架实现利用中间件进行操作日志记录功能
2018/06/06 PHP
laravel 操作数据库常用函数的返回值方法
2019/10/11 PHP
Jquery选择器 $实现原理
2009/12/02 Javascript
jQuery简单设置文本框回车事件的方法
2016/08/01 Javascript
详解js删除数组中的指定元素
2018/10/31 Javascript
vuex实现的简单购物车功能示例
2019/02/13 Javascript
CKEditor 4.4.1 添加代码高亮显示插件功能教程【使用官方推荐Code Snippet插件】
2019/06/14 Javascript
vue实现中部导航栏布局功能
2019/07/30 Javascript
[02:27]刀塔重生降临
2015/10/14 DOTA
简单理解Python中基于生成器的状态机
2015/04/13 Python
python使用7z解压apk包的方法
2015/04/18 Python
python统计文本字符串里单词出现频率的方法
2015/05/26 Python
Python_LDA实现方法详解
2017/10/25 Python
Python中一行和多行import模块问题
2018/04/01 Python
使用numpy和PIL进行简单的图像处理方法
2018/07/02 Python
python实现嵌套列表平铺的两种方法
2018/11/08 Python
利用python在大量数据文件下删除某一行的例子
2019/08/21 Python
numpy 返回函数的上三角矩阵实例
2019/11/25 Python
HTML5如何使用SVG的方法示例
2019/01/11 HTML / CSS
英国知名美妆护肤在线商城:Zest Beauty
2018/04/24 全球购物
Zatchels官网:英国剑桥包品牌
2021/01/12 全球购物
财务人员个人求职信范文
2013/12/04 职场文书
母亲80寿诞答谢词
2014/01/16 职场文书
在校大学生的职业生涯规划书
2014/03/14 职场文书
岗位竞聘书范文
2014/03/31 职场文书
应聘教师自荐书
2014/06/16 职场文书
公务员党员评议表自我鉴定
2014/09/14 职场文书
基层党员对照检查材料
2014/09/24 职场文书
人生感悟经典句子
2019/08/20 职场文书
java设计模式--三种工厂模式详解
2021/07/21 Java/Android