详解Python匿名函数(lambda函数)
作者:luckycyong 发布时间:2022-09-11 12:33:00
匿名函数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函数)详解整合网站的支持!
来源:https://blog.csdn.net/qq_38526635/article/details/81326004
猜你喜欢
- 在一篇文章中看到关于PHP引用的图解,对于加深对PHP引用的理解很有帮助,在这里备份一下。如果你对PHP的引用一点也不了解,可以先看我之前的
- 前言之前学习过binarytree第三方库,了解了它定义的各种基本用法。昨天在问答频道中做题时碰到一个关于二叉树的算法填空题,感觉代码不错非
- numpy.where (condition[, x, y])numpy.where() 有两种用法:1. np.where(conditi
- 文中涉及的示例代码,已同步更新到HelloGitHub-Team 仓库在上一篇教程中,我们通过手工方式将代码部署到了服务器。整个过程涉及到十
- 其实各大深度学习框架背后的原理都可以理解为拟合一个参数数量特别庞大的函数,所以各框架都能用来拟合任意函数,Pytorch也能。在这篇博客中,
- 前段时间前在网上看到一段面试题,要求如下:employee文件中记录了工号和姓名 cat employe
- tensorflow里面提供了实现图像进行裁剪和填充的函数,就是tf.image.resize_image_with_crop_or_pad
- 一、前言一首歌热门了,参与评论的人也很多,那我们有时候想看看评论,也只能看看热门的评论,大部分人都说的什么,咱也不知道呀~那本次咱们就把歌词
- 大家好,我是不学前端的前端程序员,事情是这个样子的,前几天不是双十一预购秒杀嘛由于我女朋友比较笨,手速比较慢,就一直抢不到,她没抢到特价商品
- requests是使用Apache2 licensed 许可证的HTTP库。用python编写。比urllib2模块更简洁。Request支
- 本文实例为大家分享了pygame实现贪吃蛇小游戏的具体代码,供大家参考,具体内容如下由于这段时间实在是太聊了,没什么事做,游戏也玩腻了,所以
- 本文汇总了python文件操作相关知识点。分享给大家供大家参考,具体如下:总是记不住API。昨晚写的时候用到了这些,但是没记住,于是就索性整
- 前言Tkinter(即 tk interface) 是 Python 标准 GUI 库,简称 “Tk&rdquo
- Python 环境安装 下载 Python 安装包进入 python 官网 ,在Downloads(下载)下面,点击 Window 进入下载
- 要在用户浏览器上安装cookie,HTTP服务器向HTTP响应添加类似以下内容的HTTP报头:Set-Cookie:session=8345
- 引入:通常,钓鱼网站本质是本质搭建一个跟正常网站一模一样的页面,用户在该页面上完成转账功能转账的请求确实是朝着正常网站的服务端提交,唯一不同
- 实例如下所:import osimport xlrdimport xlwtfrom xlutils.copy import copydef
- 在了解装饰器之前,我们需要知道什么闭包是什么鬼!闭包:在一个函数内定义了一个函数f,并且这个函数f引用外部变量,在把这个函数f当做返回值返回
- 做项目的时候,用户认证几乎是必不可少的,如果我们的项目由于一些原因不得不使用 users 之外的用户表进行认证,那么就需要多做一点工作来完成
- tkinter如何实现下拉框联动有些小伙伴想在GUI界面上实现像前端一样的下拉框联动的效果,但是前端可以通过Ajax实现,GUI如何实现呢,