当前位置: 首页 > 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 配置客户端证书 打开…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?

在工业自动化持续演进的今天&#xff0c;通信网络的角色正变得愈发关键。 2025年6月6日&#xff0c;为期三天的华南国际工业博览会在深圳国际会展中心&#xff08;宝安&#xff09;圆满落幕。作为国内工业通信领域的技术型企业&#xff0c;光路科技&#xff08;Fiberroad&…...

Linux系统部署KES

1、安装准备 1.版本说明V008R006C009B0014 V008&#xff1a;是version产品的大版本。 R006&#xff1a;是release产品特性版本。 C009&#xff1a;是通用版 B0014&#xff1a;是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存&#xff1a;1GB 以上 硬盘&#xf…...

自然语言处理——文本分类

文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益&#xff08;IG&#xff09; 分类器设计贝叶斯理论&#xff1a;线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别&#xff0c; 有单标签多类别文本分类和多…...