Python扩展知识详解:lambda函数
目录
前言
1 基本知识点
语法
特点
代码示例
2 常见使用场景
1. 与高阶函数配合使用
2. 作为排序键来使用
3. 立即调用函数
4. 在字典中使用
3 高级用法(进阶版)
1. 多参数lambda
2. 设置默认参数
3. 嵌套lambda
注意事项
何时使用lambda
何时避免使用lambda
小结
前言
Lambda函数是Python中的一种匿名函数,本质上还是一个函数,它可以用一行代码定义一个简单的函数,而不需要使用def关键字。
1 基本知识点
语法
lambda arguments: expression
-
lambda:定义lambda函数的关键字 -
arguments:函数的参数,可以有多个,参数之间用逗号分隔 -
expression:函数的返回值表达式,只能有一个表达式
特点
-
匿名函数:没有函数名
-
自动返回返回值:不需要用
return语句,会自动返回表达式的结果 -
简洁:通常用于简单操作,可以替代小型函数
-
单行表达式:只能包含一个表达式,不能包含复杂的逻辑或多条语句
-
可以作为参数传递:常用于高阶函数,如
map(),filter(),reduce()等
代码示例
# 普通函数定义
def add(x, y):return x + y# 等效的lambda函数
add_lambda = lambda x, y: x + y# 测试
print(add(3, 5)) # 输出: 8
print(add_lambda(3, 5)) # 输出: 8
2 常见使用场景
1. 与高阶函数配合使用
# 使用map()和lambda将列表中的每个元素平方
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, numbers))
print(squared) # 输出: [1, 4, 9, 16, 25]# 使用filter()和lambda筛选偶数
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # 输出: [2, 4]
map()和filter()内置函数的使用方法见其他文章(pass:作者暂未发布,后续会发布详解)
2. 作为排序键来使用
# 按元组的第二个元素排序
pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]
pairs.sort(key=lambda pair: pair[1])
print(pairs) # 输出: [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]# 按字符串长度排序
fruits = ['apple', 'banana', 'cherry', 'date']
fruits_sorted = sorted(fruits, key=lambda x: len(x))
print(fruits_sorted) # 输出: ['date', 'apple', 'banana', 'cherry']
3. 立即调用函数
# 定义并立即调用lambda函数
result = (lambda x, y: x * y)(5, 3)
print(result) # 输出: 15
4. 在字典中使用
# 使用lambda作为字典值实现简单计算器
operations = {'add': lambda x, y: x + y,'subtract': lambda x, y: x - y,'multiply': lambda x, y: x * y,'divide': lambda x, y: x / y
}print(operations['add'](10, 5)) # 输出: 15
print(operations['multiply'](10, 5)) # 输出: 50
说明:字典的值可以是任意类型,包括函数。
3 高级用法(进阶版)
1. 多参数lambda
# 多个参数的lambda函数
full_name = lambda first, last: f"{first} {last}"
print(full_name('John', 'Doe')) # 输出: John Doe
2. 设置默认参数
# 带默认参数的lambda
greet = lambda name, greeting='Hello': f"{greeting}, {name}!"
print(greet('Alice')) # 输出: Hello, Alice!
print(greet('Bob', 'Hi')) # 输出: Hi, Bob!
3. 嵌套lambda
# 嵌套lambda函数
multiplier = lambda x: (lambda y: x * y)
times3 = multiplier(3)
print(times3(5)) # 输出: 15
注意事项
-
可读性:过度使用lambda会降低代码可读性,复杂的逻辑应该使用普通函数
-
调试:lambda函数没有函数名,调试时可能更难追踪
-
限制:lambda只能包含一个表达式,不能包含语句或注解
何时使用lambda
-
函数逻辑非常简单
-
函数只在一个地方使用
-
作为参数传递给高阶函数
-
需要短小的回调函数
何时避免使用lambda
-
函数逻辑复杂
-
函数需要重用
-
需要文档字符串或类型注解
-
函数需要多个语句
小结
Lambda函数是Python中一个强大的工具,特别适合与高阶函数配合使用或需要短小匿名函数的场景。虽然它简洁高效,但应该适度使用以保持代码的可读性和可维护性。
如果您觉得本文章对您有帮助,别忘了点赞、收藏加关注,更多干货内容将持续发布,您的支持就是作者更新最大的动力。本专栏将持续更新,有任何问题都可以在评论区讨论
相关文章:
Python扩展知识详解:lambda函数
目录 前言 1 基本知识点 语法 特点 代码示例 2 常见使用场景 1. 与高阶函数配合使用 2. 作为排序键来使用 3. 立即调用函数 4. 在字典中使用 3 高级用法(进阶版) 1. 多参数lambda 2. 设置默认参数 3. 嵌套lambda 注意事项 何时…...
信号量与基于环形队列的生产者消费者模型
目录 POSIX信号量 理解 使用 初始化 销毁 等待 发布信号量 基于环形队列的生产者消费者模型 POSIX信号量 理解 信号量可用于线程间的同步,它可以用于将一整块资源切成一个个的小部分以供并发访问。它实际上是一个计数器,但特别之处在于支持原子…...
《Oracle服务进程精准管控指南:23c/11g双版本内存优化实战》 ——附自动化脚本开发全攻略
正在学习或者是使用 Oracle 数据库的小伙伴,是不是对于那个一直启动且及其占用内存的后台进程感到烦躁呢?而且即使是手动去开关也显得即为麻烦,所以基于我之前所学习到的方法,我在此重新整理,让大家动动手指就能完成开…...
Java单列集合[Collection]
目录 1.Collection单列集合 1.1单列集合各集合特点 1.2、Collection集合 1.2.1、Collection方法 1.2.2、Collection遍历方式 1.2.2.1、迭代器遍历集合 1.2.2.2、增强for遍历集合 1.2.2.3、forEach遍历集合(JDK8之后) 1.2.2.4、遍历案例 1.3、Li…...
【C++重点】lambda表达式是什么
Lambda 表达式是 C11 引入的特性,它允许你定义匿名函数对象(即没有名字的函数)。Lambda 表达式可以在需要函数对象的地方直接定义函数,常用于 STL 算法和回调机制中。 lambda表达式基本语法 [捕获列表](参数列表) -> 返回类型…...
如何在ONLYOFFICE插件中添加自定义AI提供商:以通义千问和Kimi为例
随着 ONLYOFFICE AI 插件的发布,我们极大地提升了编辑器的默认功能。在ONLYOFFICE,我们致力于提供强大且灵活的解决方案,以满足您的特定需求。其中一项便是能够在 AI 插件中添加自定义提供商。在这篇文章中,我们将展示如何将通义千…...
Java基础-26-多态-认识多态
在Java编程中,多态(Polymorphism) 是面向对象编程的核心概念之一。通过多态,我们可以编写更加灵活、可扩展的代码。本文将详细介绍什么是多态、如何实现多态,并通过具体的例子来帮助你更好地理解这一重要概念。 一、什…...
Spark,配置hadoop集群1
配置运行任务的历史服务器 1.配置mapred-site.xml 在hadoop的安装目录下,打开mapred-site.xml,并在该文件里面增加如下两条配置。 eg我的是在hadoop199上 <!-- 历史服务器端地址 --> <property><name>mapreduce.jobhistory.address…...
【蓝桥杯算法练习】205. 反转字符串中的字符(含思路 + Python / C++ / Java代码)
【蓝桥杯算法练习】205. 反转字符串中的字符(含思路 Python / C / Java代码) 🧩 题目描述 给定一个字符串 s,请你将字符串中的 英文字母字符反转,但其他 非字母字符保持在原位置,输出处理后的字符串。 …...
FPGA实现4K MIPI视频解码H265压缩网络推流输出,基于IMX317+VCU架构,支持4K60帧,提供工程源码和技术支持
目录 1、前言工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目我这里已有的 MIPI 编解码方案我这里已有的视频图像编解码方案 3、详细设计方案设计框图FPGA开发板IMX317摄像头MIPI D-PHYMIPI CSI-2 RX Subsystem图像预处理Sensor …...
【Linux】网络概念
目录 网络模型 OSI七层模型 TCP/IP五层(或四层)模型 网络传输 网络传输基本流程 封装与分用 以太网通信(局域网传输) 跨网络传输 网络模型 OSI七层模型 TCP/IP五层(或四层)模型 网络层和传输层就是操作系统的一部分 网络传输 网络传输基本流程…...
【模拟CMOS集成电路设计】电荷泵(Charge bump)设计与仿真(示例:栅极开关CP+轨到轨输入运放+基于运放CP)
【模拟CMOS集成电路设计】电荷泵(Charge bump)设计与仿真 0前言1电荷泵1.1 PFD/CP/电容器级联1.2 PFD/CP/电容传递函数 2基本电荷泵(CP)结构2.1“漏极开关”结构2.2“源极开关”结构2.3“栅极开关”结构 3 CP的设计与仿真13.1 P/N电流源失配仿真3.2 电荷…...
minecraft.service 文件配置
minecraft.service 文件配置 # /etc/systemd/system/minecraft.service [Unit] DescriptionMinecraft Fabric Server Afternetwork.target Wantsnetwork-online.target[Service] Usermcfabricuser Groupmcfabricuser WorkingDirectory/minecraft/1.21.1-fabric-server ExecStar…...
Kafka消息丢失全解析!原因、预防与解决方案
作为一名高并发系统开发工程师,在使用消息中间件的过程中,无法避免遇到系统中消息丢失的问题,而Kafka作为主流的消息队列系统,消息丢失问题尤为常见。 在这篇文章中,将深入浅出地分析Kafka消息丢失的各种情况…...
VS Code 云服务器远程开发完整指南
VS Code Ubuntu 云服务器远程开发完整指南 远程开发是现代开发者的标配之一,特别是在使用云服务器(如 Ubuntu)进行部署、测试或大项目开发时,利用 VS Code 的 Remote-SSH 插件,可以像本地一样顺滑操作远程服务器。本…...
Linux孤儿进程和僵尸进程
目录 1、孤儿进程 2、僵尸进程 在 Linux 系统中,父子进程关系的生命周期不同,导致会产生两类特殊进程:孤儿进程和僵尸进程。这两类进程在系统资源管理中起着重要作用。 1、孤儿进程 孤儿进程指的是父进程先于子进程结束,导致子…...
【Rtklib入门指南】4. 使用RTKLIB进行载波相位差分定位(RTK)
RTK RTK(Real-Time Kinematic,实时动态)定位技术是一种高精度的卫星导航技术。相比传统的GPS定位技术,RTK能够在厘米级别的精度范围内提供定位结果。这使得RTK技术在无人机、自动驾驶、工程测绘、农业机械自动化等领域具有广泛应用…...
【SECS】初识SECS协议
【SECS】初识SECS协议 基本知识流和功能函数数量官方文件中缩写标注正常是不是都是主机向设备端?对数据信息中第1字节第1-2位官网介绍 S1F1双向指令说明测试H发起端E发起端 参考资料 基本知识 SECS(SEMI Equipment Communications Standard)即半导体设…...
【C++项目】从零实现RPC框架「三」:项⽬抽象层实现
🌈 个人主页:Zfox_ 🔥 系列专栏:C++从入门到精通 目录 一:🔥 常⽤的零碎功能接⼝类实现🦋 简单⽇志宏实现🦋 Json 序列化/反序列化🦋 UUID ⽣成二:🔥 项⽬消息类型字段信息定义 🦋 请求字段宏定义🦋 消息类型定义🦋 响应码类型定义🦋 RPC 请求类型定…...
webcam video demo
一个 demo,使用 OpenCV,手动操作 webcam,保持相机打开,防止频繁的 开关损坏摄像头硬件。 这是ROS情景下的一个节点,展示了ROS节点的常见格式。代码很简单,单展示了持续视频流的发布,还展示了基…...
ARM-LDS链接文件
关键字 ALIGN 在链接脚本中,ALIGN关键字:ALIGN(X)中的X表示多少个字节对齐。 在汇编文件中,是伪操作 .align x 实现的:表示2的x次幂个字节对齐; 2.X的取值也是有讲究的,必须是2的整数次幂。例如…...
相机镜头景深
文章目录 定义影响因素实际应用特殊情况 参考:B站优致谱视觉 定义 景深是指在摄影机镜头或其他成像器前沿着能够取得清晰图像的成像器轴线所测定的物体距离范围。简单来说,就是在一张照片中,从前景到背景,能够保持清晰锐利的区域…...
Linux基础入门:从零开始掌握Linux命令行操作
🙋大家好!我是毛毛张! 🌈个人首页: 神马都会亿点点的毛毛张 🎈有没有觉得电影里的黑客🐒酷毙了?他们只用键盘⌨就能搞定一切。今天,毛毛张要带你们体验这种快感😀&…...
C++第13届蓝桥杯省b组习题笔记
1.九进制转十进制 九进制正整数 (2022)9转换成十进制等于多少? 第一位乘9的0次方,第二位乘9的1次方,第三位乘9的二次方以此类推 #include <iostream> using namespace std;int main() {// 请在此输入您的代码int t2022;int res0;int c…...
探索 Gaggol:理解 10^^^100 的宇宙级常数
一、常数概述: Gaggol 是一个极其巨大的数学常数,其数值表示为 10^^^100。这个常数是通过对数字 10 进行超递归幂运算得到的结果。 二、Gaggol 的定义: Gaggol 被定义为 10 的超多层超递归幂,即 10 被连续地提升到自身幂的层次达…...
python-leetcode 61.N皇后
题目: 按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上,并且使皇后彼此之间不能相互攻击 给你一个整数 n ,返回所有不同的 n 皇后问题 的解…...
Centos8 系統Lnmp服務器環境搭建
Centos8 系統Lnmp服務器環境搭建 服務器環境 Centos8 [rootcentos8 ~]# uname -a Linux centos8 4.18.0-348.el8.x86_64 #1 SMP Tue Oct 19 15:14:17 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux# 更新軟件包列表 rootdebian:~# dnf update安裝信息 PHP 版本8.2.27 https://ww…...
产教融合|暴雨技术专家执裁江苏省职业院校技能大赛
3月28-30日,由江苏省教育厅、省发改委、省工信厅等15家单位主办的2025年江苏省职业院校技能大赛网络系统管理赛项如期举办。此次赛事吸引了全省52支参赛队伍、156名选手踊跃参与,参赛人数再创新高。 暴雨信息技术专家李明宇作为此赛项的往届省赛冠军&am…...
BUUCTF-web刷题篇(6)
15.PHP 知识点: ①__wakeup()//将在反序列化之后立即调用(当反序列化时变量个数与实际不符是会绕过)我们可以通过一个cve来绕过:CVE-2016-7124。将Object中表示数量的字段改成比实际字段大的值即可绕过wakeup函数。条件:PHP5<…...
AIP-203 域行为文档
编号203原文链接AIP-203: Field behavior documentation状态批准创建日期2018-07-17更新日期2018-07-17 在定义protocol buffer中的域时,按惯例要向用户解释域行为的某些方面(例如域是必需的还是可选的)。此外,让其他工具理解域行…...
