详解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 Mysql自动备份脚本
Jul 14 Python
低版本中Python除法运算小技巧
Apr 05 Python
python实现支持目录FTP上传下载文件的方法
Jun 03 Python
浅谈Python的垃圾回收机制
Dec 17 Python
Python实现类的创建与使用方法示例
Jul 25 Python
python实现k-means聚类算法
Feb 23 Python
解决Django migrate No changes detected 不能创建表的问题
May 27 Python
对IPython交互模式下的退出方法详解
Feb 16 Python
Python多进程方式抓取基金网站内容的方法分析
Jun 03 Python
Python之Numpy的超实用基础详细教程
Oct 23 Python
在django项目中导出数据到excel文件并实现下载的功能
Mar 13 Python
python实现ftp文件传输功能
Mar 20 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中使用虚代理实现延迟加载技术
2014/11/05 PHP
Laravel5.5 数据库迁移:创建表与修改表示例
2019/10/23 PHP
jquery中实现简单的tabs插件功能的代码
2011/03/02 Javascript
基于jQuery的投票系统显示结果插件
2011/08/12 Javascript
JS面向对象基础讲解(工厂模式、构造函数模式、原型模式、混合模式、动态原型模式)
2014/08/16 Javascript
浅谈javascript回调函数
2014/12/07 Javascript
js预加载图片方法汇总
2015/06/15 Javascript
基于JavaScript怎么实现让歌词滚动播放
2015/11/03 Javascript
利用js+css+html实现固定table的列头不动
2016/12/08 Javascript
纯js仿淘宝京东商品放大镜功能
2017/03/02 Javascript
Node.js使用Angular简单示例
2018/05/11 Javascript
vue实现element-ui对话框可拖拽功能
2018/08/17 Javascript
vue-cli3.0使用及部分配置详解
2018/08/29 Javascript
Smartour 让网页导览变得更简单(推荐)
2019/07/19 Javascript
Layui Table js 模拟选中checkbox的例子
2019/09/03 Javascript
使用typescript快速开发一个cli的实现示例
2020/12/09 Javascript
vue中axios封装使用的完整教程
2021/03/03 Vue.js
Python 冒泡,选择,插入排序使用实例
2015/02/05 Python
Windows中安装使用Virtualenv来创建独立Python环境
2016/05/31 Python
Tensorflow 自带可视化Tensorboard使用方法(附项目代码)
2018/02/10 Python
使用python脚本实现查询火车票工具
2018/07/19 Python
解决新django中的path不能使用正则表达式的问题
2018/12/18 Python
ipython和python区别详解
2019/06/26 Python
Django命名URL和反向解析URL实现解析
2019/08/09 Python
python网络爬虫 Scrapy中selenium用法详解
2019/09/28 Python
python实现tail实时查看服务器日志示例
2019/12/24 Python
python中使用paramiko模块并实现远程连接服务器执行上传下载功能
2020/02/29 Python
使用PyWeChatSpy自动回复微信拍一拍功能的实现代码
2020/07/02 Python
python爬虫今日热榜数据到txt文件的源码
2021/02/23 Python
Viking Direct荷兰:购买办公用品
2019/06/20 全球购物
广告设计应届生求职信
2014/03/01 职场文书
党支部综合考察材料
2014/05/19 职场文书
质量承诺书怎么写
2014/05/24 职场文书
婚宴父亲致辞
2015/07/27 职场文书
Spring Boot 实现敏感词及特殊字符过滤处理
2021/06/29 Java/Android
spring IOC容器的Bean管理XML自动装配过程
2022/05/30 Java/Android