详解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脚本
Feb 10 Python
Python中的日期时间处理详解
Nov 17 Python
Python数据类型中的“冒号“[::]——分片与步长操作示例
Jan 24 Python
Django使用Mysql数据库已经存在的数据表方法
May 27 Python
python代码编写计算器小程序
Mar 30 Python
Django-Model数据库操作(增删改查、连表结构)详解
Jul 17 Python
Python通过递归获取目录下指定文件代码实例
Nov 07 Python
python 通过手机号识别出对应的微信性别(实例代码)
Dec 22 Python
Python高并发解决方案实现过程详解
Jul 31 Python
Python在线和离线安装第三方库的方法
Oct 31 Python
Django restful framework生成API文档过程详解
Nov 12 Python
python开发一个解析protobuf文件的简单编译器
Nov 17 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递归算法的详细示例分析
2013/02/19 PHP
php引用传值实例详解学习
2013/11/06 PHP
phpQuery占用内存过多的处理方法
2013/11/13 PHP
Yii列表定义与使用分页方法小结(3种方法)
2016/07/15 PHP
Javascript入门学习资料收集整理篇
2008/07/06 Javascript
JS 学习笔记 防止发生命名冲突
2009/07/30 Javascript
可自己添加html的伪弹出框实现代码
2013/09/08 Javascript
JavaScript实现维吉尼亚(Vigenere)密码算法实例
2013/11/22 Javascript
JavaScript设计模式之适配器模式介绍
2014/12/28 Javascript
JavaScript AOP编程实例
2015/06/16 Javascript
Javascript之BOM(window对象)详解
2016/05/25 Javascript
AngularJS基础 ng-cut 指令介绍及简单示例
2016/08/01 Javascript
解决Window10系统下Node安装报错的问题分析
2016/12/13 Javascript
详解Vue 2.0封装axios笔记
2017/06/22 Javascript
对于js垃圾回收机制的理解
2017/09/14 Javascript
Vue中在新窗口打开页面及Vue-router的使用
2018/06/13 Javascript
javacript replace 正则取字符串中的值并替换【推荐】
2018/09/13 Javascript
python解析文件示例
2014/01/23 Python
举例讲解Python设计模式编程中对抽象工厂模式的运用
2016/03/02 Python
数组保存为txt, npy, csv 文件, 数组遍历enumerate的方法
2018/07/09 Python
python实现停车管理系统
2018/11/30 Python
解决Django一个表单对应多个按钮的问题
2019/07/18 Python
tensorflow dataset.shuffle、dataset.batch、dataset.repeat顺序区别详解
2020/06/03 Python
美国中小型企业领先的办公家具供应商:Office Designs
2016/11/26 全球购物
英国外籍人士的在线超市:British Corner Shop
2019/06/03 全球购物
智能钱包:Ekster
2019/11/21 全球购物
什么是java序列化,如何实现java序列化
2012/11/14 面试题
中学生检讨书范文
2014/11/03 职场文书
党的群众路线教育实践活动个人整改措施范文
2014/11/04 职场文书
2014年小学教导处工作总结
2014/12/19 职场文书
滴水洞导游词
2015/02/10 职场文书
SQL Server中使用判断语句(IF ELSE/CASE WHEN )案例
2021/07/07 SQL Server
Go中的条件语句Switch示例详解
2021/08/23 Golang
Python Django获取URL中的数据详解
2021/11/01 Python
Android Studio实现简易进制转换计算器
2022/05/20 Java/Android
python实现学员管理系统(面向对象版)
2022/06/05 Python