python小记(十二):Python 中 Lambda函数详解
Python 中 Lambda函数详解
- Lambda函数详解:从入门到实战
- 一、什么是Lambda函数?
- 二、Lambda的核心语法与特点
- 1. 基础语法
- 2. 与普通函数对比
- 三、Lambda的六大应用场景(附代码示例)
- 1. 基本数学运算
- 2. 列表排序与自定义规则
- 3. 数据映射与过滤
- 4. 闭包与工厂函数
- 5. 条件逻辑与三元运算符
- 6. 快速原型开发与回调
- 四、Lambda的局限性
- 五、何时使用Lambda?何时用普通函数?
- 六、Lambda的进阶技巧
- 1. 与默认参数结合
- 2. 嵌套Lambda(谨慎使用)
- 3. 类型注解(Python 3.9+)
- 七、实战案例:用Lambda优化数据处理
- 案例:学生成绩分析
- 八、总结
Lambda函数详解:从入门到实战
一、什么是Lambda函数?
Lambda函数是Python中的匿名函数(无名函数),它以简洁的单行语法实现小型功能。与普通函数(def定义)不同,Lambda函数无需命名,常用于临时操作或作为高阶函数的参数传递。
二、Lambda的核心语法与特点
1. 基础语法
lambda 参数列表: 表达式
- 特性:
- 自动返回表达式结果,无需
return。 - 仅支持单行表达式,无法编写多行代码。
- 适用于简化代码逻辑。
- 自动返回表达式结果,无需
2. 与普通函数对比
| 特性 | Lambda函数 | 普通函数(def) |
|---|---|---|
| 函数名 | 匿名 | 需显式命名 |
| 代码行数 | 单行 | 可多行 |
| 适用场景 | 简单逻辑、临时函数、高阶函数参数 | 复杂逻辑、重复调用 |
三、Lambda的六大应用场景(附代码示例)
1. 基本数学运算
# 加法
add = lambda x, y: x + y
print(add(3, 5)) # 输出 8# 平方
square = lambda x: x ** 2
print(square(4)) # 输出 16
2. 列表排序与自定义规则
# 按字典值排序
students = [{"name": "Alice", "score": 90}, {"name": "Bob", "score": 85}]
sorted_students = sorted(students, key=lambda x: x["score"], reverse=True)
print(sorted_students) # 输出 [{'name': 'Alice', 'score': 90}, {'name': 'Bob', 'score': 85}]# 按字符串长度排序
words = ["apple", "banana", "cherry"]
sorted_words = sorted(words, key=lambda x: len(x))
print(sorted_words) # 输出 ['apple', 'banana', 'cherry']
3. 数据映射与过滤
# 映射:将数值转换为字符串
numbers = [1, 2, 3]
str_numbers = list(map(lambda x: f"Number: {x}", numbers))
print(str_numbers) # 输出 ['Number: 1', 'Number: 2', 'Number: 3']# 过滤:筛选正数
values = [-5, 10, -3, 8]
positives = list(filter(lambda x: x > 0, values))
print(positives) # 输出 [10, 8]
4. 闭包与工厂函数
def power_factory(exponent):return lambda x: x ** exponentsquare = power_factory(2)
cube = power_factory(3)print(square(4)) # 输出 16
print(cube(3)) # 输出 27
5. 条件逻辑与三元运算符
# 判断数字是否为质数(简化示例)
is_prime = lambda n: n > 1 and all(n % i != 0 for i in range(2, int(n**0.5)+1))
print(is_prime(7)) # 输出 True
print(is_prime(4)) # 输出 False# 数值分类
classify = lambda x: "正数" if x > 0 else ("零" if x == 0 else "负数")
print(classify(5)) # 输出 "正数"
print(classify(-3)) # 输出 "负数"
6. 快速原型开发与回调
# GUI事件处理(伪代码)
button.on_click(lambda event: print("按钮被点击!"))# 异步任务回调
download_file(url, callback=lambda data: save_to_disk(data))
四、Lambda的局限性
- 无法处理复杂逻辑:不支持多行代码、循环、异常处理。
- 可读性降低:过度使用会让代码难以维护。
- 调试困难:匿名特性导致错误提示不明确。
五、何时使用Lambda?何时用普通函数?
| 场景 | 推荐选择 |
|---|---|
| 简单计算(如加减乘除) | Lambda |
| 高阶函数的参数(如sorted的key) | Lambda |
| 需要命名、复用或复杂逻辑 | 普通函数(def) |
六、Lambda的进阶技巧
1. 与默认参数结合
greet = lambda name, lang="en": "Hello" if lang == "en" else "你好"
print(greet("Alice")) # 输出 "Hello"
print(greet("李华", "zh")) # 输出 "你好"
2. 嵌套Lambda(谨慎使用)
complex_op = lambda x: (lambda y: x + y)(5)
print(complex_op(3)) # 输出 8(等效于3+5)
3. 类型注解(Python 3.9+)
from typing import Callableadd: Callable[[int, int], int] = lambda x, y: x + y
七、实战案例:用Lambda优化数据处理
案例:学生成绩分析
students = [{"name": "Alice", "math": 85, "english": 92},{"name": "Bob", "math": 78, "english": 88},{"name": "Charlie", "math": 90, "english": 85}
]# 按总分排序
students_sorted = sorted(students, key=lambda x: x["math"] + x["english"], reverse=True)# 计算平均分
avg_math = sum(map(lambda x: x["math"], students)) / len(students)
print(f"数学平均分: {avg_math:.1f}")
八、总结
- Lambda的核心价值:精简代码、即用即抛。
- 适用场景:排序、映射、过滤、简单计算。
- 避坑指南:避免复杂逻辑、优先考虑可读性。
相关文章:
python小记(十二):Python 中 Lambda函数详解
Python 中 Lambda函数详解 Lambda函数详解:从入门到实战一、什么是Lambda函数?二、Lambda的核心语法与特点1. 基础语法2. 与普通函数对比 三、Lambda的六大应用场景(附代码示例)1. 基本数学运算2. 列表排序与自定义规则3. 数据映射…...
第二十一讲 XGBoost 回归建模 + SHAP 可解释性分析(利用R语言内置数据集)
下面我将使用 R 语言内置的 mtcars 数据集,模拟一个完整的 XGBoost 回归建模 SHAP 可解释性分析 实战流程。我们将以预测汽车的油耗(mpg)为目标变量,构建 XGBoost 模型,并用 SHAP 来解释模型输出。 🚗 示例…...
数据分析实战案例:使用 Pandas 和 Matplotlib 进行居民用水
原创 IT小本本 IT小本本 2025年04月15日 18:31 北京 本文将使用 Matplotlib 及 Seaborn 进行数据可视化。探索如何清理数据、计算月度用水量并生成有价值的统计图表,以便更好地理解居民的用水情况。 数据处理与清理 读取 Excel 文件 首先,我们使用 pan…...
Asp.NET Core WebApi 创建带鉴权机制的Api
构建一个包含 JWT(JSON Web Token)鉴权的 Web API 是一种常见的做法,用于保护 API 端点并验证用户身份。以下是一个基于 ASP.NET Core 的完整示例,展示如何实现 JWT 鉴权。 1. 创建 ASP.NET Core Web API 项目 使用 .NET CLI 或 …...
hash.
Redis 自身就是键值对结构 Redis 自身的键值对结构就是通过 哈希 的方式来组织的 哈希类型中的映射关系通常称为 field-value,用于区分 Redis 整体的键值对(key-value), 注意这里的 value 是指 field 对应的值,不是键…...
记录鸿蒙应用上架应用未配置图标的前景图和后景图标准要求尺寸1024px*1024px和标准要求尺寸1024px*1024px
审核报错【①应用未配置图标的前景图和后景图,标准要求尺寸1024px*1024px且需下载HUAWEI DevEco Studio 5.0.5.315或以上版本进行图标再处理、②应用在展开状态下存在页面左边距过大的问题, 应用在展开状态下存在页面右边距过大的问题, 当前页面左边距: 504 px, 当前页面右边距…...
golang-常见的语法错误
https://juejin.cn/post/6923477800041054221 看这篇文章 Golang 基础面试高频题详细解析【第一版】来啦~ 大叔说码 for-range的坑 func main() { slice : []int{0, 1, 2, 3} m : make(map[int]*int) for key, val : range slice {m[key] &val }for k, v : …...
Google最新《Prompt Engineering》白皮书全解析
近期有幸拿到了Google最新发布的《Prompt Engineering》白皮书,这是一份由Lee Boonstra主笔,Michael Sherman、Yuan Cao、Erick Armbrust、Antonio Gulli等多位专家共同贡献的权威性指南,发布于2025年2月。今天我想和大家分享这份68页的宝贵资…...
如何快速部署基于Docker 的 OBDIAG 开发环境
很多开发者对 OceanBase的 SIG社区小组很有兴趣,但如何将OceanBase的各类工具部署在开发环境,对于不少开发者而言都是比较蛮烦的事情。例如,像OBDIAG,其在WINDOWS系统上配置较繁琐,需要单独搭建C开发环境。此外&#x…...
[LeetCode 1306] 跳跃游戏3(Ⅲ)
题面: LeetCode 1306 思路: 只要能跳到其中一个0即可,和跳跃游戏1/2完全不同了,记忆化暴搜即可。 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( n ) O(n) O(n) 代码: dfs vector<…...
spring-ai-alibaba使用Agent实现智能机票助手
示例目标是使用 Spring AI Alibaba 框架开发一个智能机票助手,它可以帮助消费者完成机票预定、问题解答、机票改签、取消等动作,具体要求为: 基于 AI 大模型与用户对话,理解用户自然语言表达的需求支持多轮连续对话,能…...
STM32平衡车开发实战教程:从零基础到项目精通
STM32平衡车开发实战教程:从零基础到项目精通 一、项目概述与基本原理 1.1 平衡车工作原理 平衡车是一种基于倒立摆原理的两轮自平衡小车,其核心控制原理类似于人类保持平衡的过程。当人站立不稳时,会通过腿部肌肉的快速调整来维持平衡。平…...
使用DeepSeek AI高效降低论文重复率
一、论文查重原理与DeepSeek降重机制 1.1 主流查重系统工作原理 文本比对算法:连续字符匹配(通常13-15字符)语义识别技术:检测同义替换和结构调整参考文献识别:区分合理引用与不当抄袭跨语言检测:中英文互译内容识别1.2 DeepSeek降重核心技术 深度语义理解:分析句子核心…...
linux多线(进)程编程——(7)消息队列
前言 现在修真界大家的沟通手段已经越来越丰富了,有了匿名管道,命名管道,共享内存等多种方式。但是随着深入使用人们逐渐发现了这些传音术的局限性。 匿名管道:只能在有血缘关系的修真者(进程)间使用&…...
WinForm真入门(14)——ListView控件详解
一、ListView 控件核心概念与功能 ListView 是 WinForm 中用于展示结构化数据的多功能列表控件,支持多列、多视图模式及复杂交互,常用于文件资源管理器、数据报表等场景。 核心特点: 支持 5种视图模式:Details&…...
Python + Playwright:规避常见的UI自动化测试反模式
Python + Playwright:规避常见的UI自动化测试反模式 前言反模式一:整体式页面对象(POM)反模式二:具有逻辑的页面对象 - POM 的“越界”行为反模式三:基于 UI 的测试设置 - 缓慢且脆弱的“舞台搭建”反模式四:功能测试过载 - “试图覆盖一切”的测试反模式之间的关联与核…...
从服务器多线程批量下载文件到本地
1、客户端安装 aria2 下载地址:aria2 解压文件,然后将文件目录添加到系统环境变量Path中,然后打开cmd,输入:aria2c 文件地址,就可以下载文件了 2、服务端配置nginx文件服务器 server {listen 8080…...
循环神经网络 - 深层循环神经网络
如果将深度定义为网络中信息传递路径长度的话,循环神经网络可以看作既“深”又“浅”的网络。 一方面来说,如果我们把循环网络按时间展开,长时间间隔的状态之间的路径很长,循环网络可以看作一个非常深的网络。 从另一方面来 说&…...
linux运维篇-Ubuntu(debian)系操作系统创建源仓库
适用范围 适用于Ubuntu(Debian)及其衍生版本的linux系统 例如,国产化操作系统kylin-desktop-v10 简介 先来看下我们需要创建出来的仓库目录结构 Deb_conf_test apt源的主目录 conf 配置文件存放目录 conf目录下存放两个配置文件&…...
深度学习之微积分
2.4.1 导数和微分 2.4.2 偏导数 安装步骤 参考 ubuntu2018 安装 vcs2018 安装该…...
Express中间件(Middleware)详解:从零开始掌握(3)
实用中间件模式25例 1. 基础增强模式 请求属性扩展 function extendRequest() {return (req, res, next) > {req.getClientLanguage () > {return req.headers[accept-language]?.split(,)[0] || en;};next();}; } 响应时间头 function responseTime() {return (r…...
深入理解微信小程序开发:架构、组件化与进阶实战
📘博文正文: 深入理解微信小程序开发:架构、组件化与进阶实战 微信小程序已成为移动互联网的重要入口。随着业务复杂度提升,仅靠入门知识已无法应对日常开发需求。本文将深入剖析小程序开发架构、组件化模式、状态管理、网络封装…...
逆向|中国产业政策大数据平台|请求体加密
2025-04-11 逆向地址:aHR0cDovL3poZW5nY2UuMmIuY24v 打开开发者工具出现debugger,直接注入脚本过掉无限debugger let aaa Function.prototype.constructor; Function.prototype.constructor function (params) { if(params ‘debugger’){ console.log(params); return null…...
在SpringBoot中访问 static 与 templates 目录下的内容
目录 步骤一:添加 Thymeleaf 依赖 (处理 Templates 目录)步骤二:配置静态资源路径 (可选但建议了解)步骤三:访问不同目录下的 HTML 文件访问 static 目录下的 HTML 文件访问 templates 目录下的 HTML 文件 总结 在使用 Spring Boot 开发 Web …...
游戏引擎学习第226天
引言,计划 我们目前的目标是开始构建“元游戏”结构。所谓元游戏,指的是不直接属于核心玩法本身,但又是游戏体验不可或缺的一部分,比如主菜单、标题画面、存档选择、选项设置、过场动画等。我们正在慢慢将这些系统结构搭建起来。…...
青少年编程与数学 02-016 Python数据结构与算法 22课题、并行算法
青少年编程与数学 02-016 Python数据结构与算法 22课题、并行算法 一、GPU并行计算矩阵乘法示例 二、MPI并行计算allgather操作示例 三、Python中的并行计算多线程并行计算多进程并行计算 四、SIMD并行计算SIMD并行计算示例 总结 课题摘要: 并行算法是通过同时执行多个任务或操…...
