当前位置: 首页 > news >正文

python中lambda的用法

1. lambada简单介绍


lambda 在Python编程中使用的频率非常高,我们通常提及的lambda表达式其实是python中的一类特殊的定义函数的形式,使用它可以定义一个匿名函数。即当你需要一个函数,但又不想费神去命名一个函数,这时候,就可以使用 lambda了。
代码示例:

g = lambda x: x+1  # 求 x+1 的和


结果

>>> g(1)
2
>>> g(2)
3


可以这样认为,lambda作为一个表达式,定义了一个匿名函数,上例的代码x为入口参数,x+1为函数体,用函数来表示为:

def g(x):return x+1


以上可以看出,lambda 表达式使得代码更为紧凑,但理解起来却没有定义函数那么看起来直白易懂。因此,关于使不使用 lambda表达式一直存在争议,就看个人选择了。

2. lambda 语法


lambda函数的语法只包含一个语句,如下:

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


其中,lambda是Python预留的关键字,arg和expression由用户自定义。
代码示例

# 普通python函数
def func(a,b,c):return a+b+cprint (func(1,2,3))
# 结果为 6# lambda匿名函数
f = lambda a,b,c: a+b+cprint (f(1,2,3))
# 结果为 6# 在代码:f = lambda a,b,c: a+b+c 中,lambda表示匿名函数,
# 冒号 “:”之前的a,b,c表示它们是这个函数的参数。
# 匿名函数不需要return来返回值,表达式本身结果就是返回值。


3. lambda 函数的示例


1. 无参匿名函数:

>>> t = lambda : True  # 分号前无任何参数
>>> t()
True


等价于下面的def定义的函数

>>> def func(): 
...     return True
...
>>> func()
True


2. 带参数匿名函数

>>> lambda x: x**3  # 带有一个参数>>> lambda x, y, z: x+y+z # 带有多个参数>>> lambda x, y=3: x*y  # 存在默认值的参数


3. 输入任意个数的参数

>>> lambda *z: z  # *z传入的是任意个数的参数


4. 输入带键值对的参数

>>> lambda **arg: arg  # **arg传入的是带键值对的参数



4. lambda函数的用法


4.1 将函数赋值给一个变量,然后再像一般函数调用

>>> f = lambda x, y, z: x*y*z
>>> f(2,3,4)
24


4.2 直接在lambda表达式后面传递实参

>>> (lambda x, y: x if x>y else y)(1, 2)
2
# 判断字符串是否以某个字母开头
>>> print((lambda x:x.startswith('B'))('Bob'))
True


4.3 将lambda嵌套到普通函数中,lambda函数本身做为return的值
代码示例:

>>> def add(n):
...     return lambda x: x+n
...
>>> f = add(1)
>>> f(2)
3


例题1. 字符串拼接

>>> f = (lambda x="I",y="Come",z="Here": x+y+z)
>>> f("You")
'YouComeHere'


例题2. 和列表结合使用

>>> L = [lambda x: x**2,\lambda x: x**3,\lambda x: x**4]
>>> for x in L:
...     print(x(2))
...
4
8
16


也可以像下面这样调用

>>> print(L[0](2))
4


例题3. 和字典结合使用

>>> key = 'B'
>>> dic = { 'A': lambda: 2*2,\
...         'B': lambda: 2*4,\
...         'C': lambda: 2*6}
>>> dic[key]()
8


例题4. 求最小值

>>> lower = lambda x, y: x if x<y else y
>>> lower(1, 2)
1


4.4 将lambda函数作为参数传递给其他函数


1. 结合 map 函数使用

此时lambda函数用于指定对列表中每一个元素的共同操作

代码示例

# 求两个列表元素的和>>> a = [1,2,3,4]
>>> b = [5,6,7,8]
>>> list(map(lambda x, y: x+y, a, b))
[6, 8, 10, 12]
>>> squares = map(lambda x: x**2, range(5))
>>> list(squares)
[0, 1, 4, 9, 16]
# 求字符串每个单词的长度 
>>> sentence = "Hello World"
>>> words = sentence.split()
>>> lengths = map(lambda x: len(x), words)
>>> list(lengths)
[5, 5]
# 写成一行:
>>> list(map(lambda x:len(x),'Hello World'.split()))


2. 结合filter函数使用

此时lambda函数用于指定过滤列表元素的条件

代码示例

# 筛选偶数
>>> list(filter(lambda x: x%2==0,  [1,2,3,4,5,6]))
[2, 4, 6]# 等价于下面的列表推导式
>>> l = [x for x in [1,2,3,4,5,6] if x%2==0]
>>> l
[2, 4, 6]

# 选出以 B 开头的名字
>>> names = ['Anne', 'Amy', 'Bob', 'David', 'Carrie', 'Barbara']
>>> name= filter(lambda x: x.startswith('B'), names)
>>> list(name)
['Bob', 'Barbara']


3. 和 filter函数和map函数结合使用

代码示例

>>> squares = map(lambda x: x**2, range(10))
>>> filters = filter(lambda x: x>5 and x<50, squares)
>>> list(filters)
[9, 16, 25, 36, 49]


4. 结合sorted函数使用

此时lambda函数用于指定对列表中所有元素进行排序的准则

代码示例

>>> info = [('James',32), ('Alies',20), ('Wendy',25)]
>>> sorted(info, key=lambda age:age[1])  # 按照第二个元素,索引为1排序
[('Alies', 20), ('Wendy', 25), ('James', 32)]


5. 结合 reduce函数使用

此时lambda函数用于指定列表中两两相邻元素的结合条件。

代码示例

>>>def add(x, y) : # 两数相加
...    return x + y
...
>>> reduce(add, [1,2,3,4,5]) # 计算列表和:1+2+3+4+5
15
>>> reduce(lambda x, y: x+y, [1,2,3,4,5]) # 使用 lambda 匿名函数
15


注意事项
lambda 并不会带来程序运行效率的提高,只会使代码更简洁。

如果可以使用for…in…if来完成的,坚决不用lambda。

如果使用lambda,lambda内不要包含循环,如果有,应定义函数来完成,使代码获得可重用性和更好的可读性。

lambda 是为了减少单行函数的定义而存在的。
 

相关文章:

python中lambda的用法

1. lambada简单介绍 lambda 在Python编程中使用的频率非常高&#xff0c;我们通常提及的lambda表达式其实是python中的一类特殊的定义函数的形式&#xff0c;使用它可以定义一个匿名函数。即当你需要一个函数&#xff0c;但又不想费神去命名一个函数&#xff0c;这时候&#xf…...

网络安全协议(3)

作者简介&#xff1a;一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.当前流行操作系统的安全等级 1.Windows的安全等级 什么是EAL…...

102.第十九章 MySQL数据库 -- MySQL的备份和恢复(十二)

5.备份和恢复 5.1 备份恢复概述 5.1.1 为什么要备份 灾难恢复:硬件故障、软件故障、自然灾害、黑客攻击、误操作测试等数据丢失场景 参考链接: https://www.toutiao.com/a6939518201961251359/ 5.1.2 备份类型 完全备份,部分备份 完全备份:整个数据集 部分备份:只备份数…...

【C++】C++入门 类与对象(一)

类与对象&#xff08;一&#xff09;一、类的引入二、类的定义1、类的两种定义方式&#xff1a;2、成员变量命名规则的建议&#xff1a;三、类的访问限定符及封装1、访问限定符2、封装四、类的实例化1、类的实例化概念2、类对象的大小的计算五、this指针this指针的特性一、类的…...

笔记_js运算符

目录二进制相关运算符移位运算符<<>>&#xff5c;(位或运算)参考文档二进制相关运算符 移位运算符 移位运算就是对二进制进行有规律的移位。 tips:进制转换文档链接 << “<<”运算符执行左移位运算。在移位运算过程中&#xff0c;符号位始终保持不变…...

java面试题(十九) Mybatis

4.1 谈谈MyBatis和JPA的区别 参考答案 ORM映射不同&#xff1a; MyBatis是半自动的ORM框架&#xff0c;提供数据库与结果集的映射&#xff1b; JPA&#xff08;默认采用Hibernate实现&#xff09;是全自动的ORM框架&#xff0c;提供对象与数据库的映射。 可移植性不同&…...

Linux系统位运算函数以及相应CPU ISA实现收录

以32位数据的二进制表示为例&#xff0c;习惯的写法是LSB在左&#xff0c;MSB在右&#xff0c;注意BIT序和大小端的字节序没有关系。Linux和BIT操作有关的接口在定义在头文件bitops.h中&#xff0c;bitops.h定义有两层&#xff0c;通用层和架构层&#xff0c;对应两个bitops.h&…...

logback配置文件---logback.xml

目录常识操作logback-spring.xml 示例参考于 https://blog.csdn.net/white_ice/article/details/85065219 https://blog.csdn.net/weixin_42592282/article/details/122109703 https://www.dianjilingqu.com/629077.html 常识 https://www.dianjilingqu.com/629077.html nod…...

Web前端-设计网站公共header

设计网站公共headerheader元素是一个具有引导和导航作用的结构元素&#xff0c;很多企业网站中都有一个非常重要的header元素&#xff0c;一般位于网页的开头&#xff0c;用来显示企业名称、企业logo图片、整个网站的导航条&#xff0c;以及Flash形式的广告条等。在本网站中&am…...

引用和指针傻傻分不清

&#x1f680;&#x1f680;&#x1f680;大家觉不错的话&#xff0c;就恳求大家点点关注&#xff0c;点点小爱心&#xff0c;指点指点&#x1f680;&#x1f680;&#x1f680; 目录 &#x1f430;引用和指针的区别 &#x1f338;从现象上看 &#x1f338;从编译上看 &am…...

MySQL面试题:关系型数据库SQL和非关系型数据库NoSQL

文章目录一、四大非关系型数据库与关系型数据库的对比1. 关系型数据库2. 基于列的数据库3. 键值对存储4. 文档存储5. 图形数据库参考文章&#xff08;金文&#xff09;&#xff1a;四大非关系型数据库类型&#xff0c;你知道多少 参考文章&#xff1a;“行式存储”和“列式存储…...

1.Redis【介绍与安装】

1.常用数据库介绍 mysql的表类型[表引擎.存储引擎],memory表结构和表数据分开存储的,表结构保存在硬盘中,表数据保存在内存中memcache是一款软件,可以使用键值对的格式保存数据到内存中redis是意大利的工程师开发的开源免费的告诉缓存数据库,需要注意的是作者本身只开发了linu…...

DataStore快速上手1-preference

DataStore 概念 DataStore 可以存储两种类型的数据&#xff0c;一种是 preference&#xff0c;一种是 protobuf 每个进程在同一时间内仅能打开一个 DataStore 实例&#xff08;或者通过其他管理手段来实现多个 DataStore 交替使用&#xff09; 一个 DataStore 可以视为一张数…...

彻底掌握 MySQL InnoDB 的锁机制

本文是对沈剑大佬锁机制十多篇文章的概括总结&#xff0c;文末有全部链接&#xff0c;还参考了 10 多位其他网友的优秀分享。 1、概要 MySQL 中的锁可以按照粒度分为锁定整个表的表级锁(table-level locking)和锁定数据行的行级锁(row-level locking)&#xff1a; 表级锁具有开…...

C++继承

1.继承的概念及定义 1.1继承的概念 继承机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许程序员在保持原有类特性的基础上进行扩展&#xff0c;增加功能&#xff0c;这样产生新的类&#xff0c;称派生类。继承呈现了面向对象程序设计的层次结构&#x…...

动态代理是基于什么原理?

第6讲 | 动态代理是基于什么原理&#xff1f; 编程语言通常有各种不同的分类角度&#xff0c;动态类型和静态类型就是其中一种分类角度&#xff0c;简单区分就是语言类型信息是在运行时检查&#xff0c;还是编译期检查。 与其近似的还有一个对比&#xff0c;就是所谓强类型和弱…...

YOLO-V4经典物体检测算法介绍

在前文我们介绍了YOLO-V1~V3版本都做了哪些事&#xff0c;本文我们继续介绍YOLO-V4版本。YOLO的作者在发表完V3之后&#xff0c;发现YOLO产品被美国军方应用到了很多军事战争当中&#xff0c;这是他所不希望看见的&#xff0c;因此宣布不再继续研究。但历史和科技总是随时间不断…...

angular相关知识点总结

创建 angualr 组件和传值 angular组件其实就是个xxx.component.ts,本质还是ts文件一个html文件 1.创建组件&#xff1a;在Angular中&#xff0c;可以使用命令行工具ng generate component创建一个新组件。例如&#xff1a; ng generate component my-component这将创建一个名…...

大坝安全监测系统:水库“守坝人”!

一、项目背景 随着社会经济的迅速发展&#xff0c;我国水资源利用率越来越高&#xff0c;各类水利水电工规模进一步扩大。在抗洪救灾、水利发电等方面带来巨大的经济和社会效益。但受多种因素影响&#xff0c;大坝的安全问题日益严重。大量工程实践证明&#xff0c;为保证大坝…...

CentOS7安装配置OpenVNP连接远端服务器

在项目当中需要访问一个三方接口及数据库&#xff0c;但是需要在CentOS7服务器上先配置OpenVPN&#xff0c;然后才能连接&#xff0c;现将整体配置过程记录如下。 安装 yum -y install epel-release yum -y install openvpn 查看版本 openvpn --version 配置客户端证书 打开…...

04- Matplotlib数据可视化详解 (数据库)

Matplotlib的亮点: import matplotlib.pyplot as plt # 导包plt.figure(figsize (9, 6) , 设置图片大小plt. plot(x, y), 画图绘制网格线: 线型, 颜色, 透明度plt.grid(linestyle --, color green, alpha0.75) # linestyle: 样式, color: 颜色, alpha: 透明度plt.axis(…...

高性能MySQL -- 查询性能优化

一般来说一个好的程序&#xff1a;查询优化&#xff0c;索引优化&#xff0c;库表结构要同时进行优化。今天我们来讲一下查询优化。 我们需要对MySQL的架构有基本认知&#xff0c;所以这里贴一张图大家看看&#xff1a; 图片来自于《小林coding》 为什么从查询会慢&#xff1…...

Android Binder机制之一(简介)

目录 前言 一、Android 进程间通信方式 二、Binder架构图 三、Binder涉及角色 3.1 Binder驱动 3.2 Binder实体 3.3 Binder引用 3.4 远程服务 3.5 ServiceManager守护进程 四、涉及源码 前言 这是本人第N次看Binder 相关知识了&#xff0c;其实每次看都有新的收获&…...

《SOC芯片研究框架》深度科普,发展趋势、技术特点、产业链一文看懂

片上系统SoC&#xff08;System on Chip&#xff09;&#xff0c;即在一块芯片上集成一整个信息处理系统&#xff0c;简单来说 SoC芯片是在中央处理器CPU的基础上扩展音视频功能和专用接口的超大规模集成电路&#xff0c;是智能设备的“大脑”。随着半导体工艺的发展&#xff0…...

WebRTC中的ICE

ICE简介 ICE是用于UDP媒体传输的NAT穿透协议&#xff08;适当扩展也可以支持TCP&#xff09;&#xff0c;它需要利用STUN和TURN协议来完成工作。 STUN协议提供了获取一个内网地址对应的公网地址映射关系&#xff08;NAT Binding&#xff09;的机制&#xff0c;并且提供了它们…...

了解webpack

文章目录一、webpack是什么&#xff1f;二、为什么要使用webpack三、webpack的五个核心概念四、安装webpack提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、webpack是什么&#xff1f; 本质上&#xff0c;webpack 是一个用于现代 JavaScript 应用程…...

NoSQL数据库详细介绍

一、NoSQL发展历史 NoSQL 一词最早出现于 1998 年&#xff0c;是 Carlo Strozzi 开发的一个轻量、开源、不提供 SQL 功能的关系数据库。 2009 年&#xff0c;Last.fm 的 Johan Oskarsson 发起了一次关于分布式开源数据库的讨论&#xff0c;来自 Rackspace 的 Eric Evans 再次…...

【2023】华为OD机试真题Java-题目0210-优秀学员统计

优秀学员统计 题目描述 公司某部门软件教导团正在组织新员工每日打卡学习活动,他们开展这项学习活动已经一个月了,所以想统计下这个月优秀的打卡员工。 每个员工会对应一个id,每天的打卡记录记录当天打卡员工的id集合,一共30天。 请你实现代码帮助统计出打卡次数top5的员…...

2023备战金三银四,Python自动化软件测试面试宝典合集

马上就又到了程序员们躁动不安&#xff0c;蠢蠢欲动的季节~这不&#xff0c;金三银四已然到了家门口&#xff0c;元宵节一过后台就有不少人问我&#xff1a;现在外边大厂面试都问啥想去大厂又怕面试挂面试应该怎么准备测试开发前景如何面试&#xff0c;一个程序员成长之路永恒绕…...

2023年实体店做什么比较好赚钱?

2023年实体店做什么比较好赚钱&#xff1f;未来实体店真正能赚的模型是什么&#xff1f;#百收#狂潮老师#千行#干货分享#商业思维 2023年实体店做什么比较好赚钱&#xff1f;...

天津网站建设制作免费/百度seo关键词优化公司

因为有时候我们打印输出不需要换行&#xff0c;但是 Python3 print 内置函数是自动换行的&#xff0c;咱们修改内置函数? 先看下 print 函数的原型&#xff1a; print(*objects, sep , end\n, filesys.stdout)参数 objects -- 复数&#xff0c;表示可以一次输出多个对象。输…...

昌平网站制作开发公司/怎样给自己的网站做优化

A.确保宿主机能够上网的物理网卡的地址不是192.168.0.0/24网段----如果物理网卡的IP也是192.168.0.0/24网段&#xff0c;则需要手工指定vmnet1网卡的IP以及虚拟机的网卡参数设置B.配置能连外网的网卡的internet共享&#xff0c;并选择家庭网络连接为vmnet1----设置完成后vmnet1…...

企业163邮箱登录入口/seo创业

前言 2017年进大学开始接触Android&#xff0c;从刚开始接触就不断地听到Android市场饱和&#xff0c;工作难找等消息。虽然当时也非常迷茫&#xff0c;不过由于第一次深入接触编程语言&#xff0c;再加上自己的一点兴趣&#xff0c;就一直坚持下来了。 到现在要毕业了&#…...

个人网站建设法律规定/自己怎么做网站推广

图2-1 DDNS典型组网图 DDNS的典型组网环境如图2-1所示&#xff0c;DDNS采用客户端/服务器模式&#xff1a; DDNS客户端&#xff1a;IP地址变化时&#xff0c;需要在DNS服务器上动态更新其域名和IP地址对应关系的设备。Internet用户通常通过域名访问提供应用层服务…...

学做日本料理网站/百度学术搜索

CFAR(自适应常量反射率)算法是一种用于检测弱信号的算法&#xff0c;它使用自适应的反射率确定信号的强度&#xff0c;从而检测到弱信号。它利用一种称为“自适应参考窗口”的技术&#xff0c;其中每个测量点都有一个参考窗口&#xff0c;其大小由测量点的邻居决定。算法将测量…...

网页游戏制作平台/看seo

Lync Server 2013相比Lync Server 2010在视频会议上有许多改进&#xff0c;这些改进很多都是跨时代的&#xff0c;也是令人兴奋的。今天我们抛开Lync Server 2013的部署、配置&#xff0c;来看一下有趣的东西。首先&#xff0c;需要给大家介绍的Lync Server 2013在视频会议上核…...