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:函数的返回值表达式,只能有一个表达式

特点

  1. 匿名函数:没有函数名

  2. 自动返回返回值:不需要用return语句,会自动返回表达式的结果

  3. 简洁:通常用于简单操作,可以替代小型函数

  4. 单行表达式:只能包含一个表达式,不能包含复杂的逻辑或多条语句

  5. 可以作为参数传递:常用于高阶函数,如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

注意事项

  1. 可读性:过度使用lambda会降低代码可读性,复杂的逻辑应该使用普通函数

  2. 调试:lambda函数没有函数名,调试时可能更难追踪

  3. 限制:lambda只能包含一个表达式,不能包含语句或注解

何时使用lambda

  • 函数逻辑非常简单

  • 函数只在一个地方使用

  • 作为参数传递给高阶函数

  • 需要短小的回调函数

何时避免使用lambda

  • 函数逻辑复杂

  • 函数需要重用

  • 需要文档字符串或类型注解

  • 函数需要多个语句


小结

        Lambda函数是Python中一个强大的工具,特别适合与高阶函数配合使用或需要短小匿名函数的场景。虽然它简洁高效,但应该适度使用以保持代码的可读性和可维护性。

如果您觉得本文章对您有帮助,别忘了点赞、收藏加关注,更多干货内容将持续发布,您的支持就是作者更新最大的动力。本专栏将持续更新,有任何问题都可以在评论区讨论

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/76219.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android: Fragment 的使用指南

Android 中 Fragment 的使用指南 Fragment 是 Android 应用开发中的重要组件,它代表 Activity 中的一部分 UI 或行为,可以组合多个 Fragment 在一个 Activity 中构建多窗格 UI,并在不同 Activity 中重复使用某个 Fragment。 基本概念 Frag…

Vue React

Vue 的源码主要分为以下几个部分: 主要涉及 响应式、虚拟 DOM、组件系统、编译器、运行时。 ├── packages/ │ ├── compiler-core/ # 编译器核心 │ ├── compiler-sfc/ # 处理 .vue 单文件组件 │ ├── compiler-dom/ # 处理 DOM 相关…

项目实战--权限列表

后端数据: 用表格实现权限列表 const dataSource [{key: 1,name: 胡彦斌,age: 32,address: 西湖区湖底公园1号,},{key: 2,name: 胡彦祖,age: 42,address: 西湖区湖底公园1号,}, ];const columns [{title: 姓名,dataIndex: name,key: name,},{title: 年龄,dataInd…

私有知识库 Coco AI 实战(一):Linux 平台部署

Coco AI 是一个完全开源、跨平台的统一搜索和生产力工具,能够连接各种数据源,包括应用程序、文件、Google Drive、Notion、Yuque、Hugo 等,帮助用户快速智能地访问他们的信息。通过集成 DeepSeek 等大型模型,Coco AI 实现了智能个…

【大模型】微调一个大模型需要多少 GPU 显存?

视频链接:微调一个模型需要多少GPU显存? up 主页:AI老兵tags: #GPU显存 #模型微调 #LoRA #QLoRA #参数计算 本集视频详细介绍了在模型微调过程中 GPU显存需求的计算方法,包括全量微调和高效微调(如 LoRA&am…

Lambda 表达式是什么以及如何使用

目录 📌 Kotlin 的 Lambda 表达式详解 🎯 什么是 Lambda 表达式? 🔥 1. Lambda 表达式的基本语法 ✅ 示例 1:Lambda 基本写法 ✅ 示例 2:使用 it 关键字(单参数简化) ✅ 示例 3…

全文 MLIR TOY -- Chapter2: 发出基本的 MLIR——把AST变成SSA的 MLIR Dialect IR

现在我们已经熟悉 Toy 语言和它的AST表示,现在让我们看看 MLIR 是怎样帮助编译 Toy 源程序的。 简介:多层中间表示 其他的编译器,像 LLVM,是提供一个固定的预定义类型和指令(通常是底层的像 RISC的指令)。对…

一个判断A股交易状态的python脚本

最近在做股票数据相关的项目,需要用到判断某一天某个时刻A股的状态,比如休市,收盘,交易中等,发动脑筋想了一下,这个其实还是比较简单的,这里我把实现方法分享给大家。 思路 当天是否休市 对于某…

LLaMA Factory微调后的大模型在vLLM框架中对齐对话模版

LLaMA Factory微调后的大模型Chat对话效果,与该模型使用vLLM推理架构中的对话效果,可能会出现不一致的情况。 下图是LLaMA Factory中的Chat的对话 下图是vLLM中的对话效果。 模型回答不稳定:有一半是对的,有一半是无关的。 1、未…

004 健身房个性化训练计划——金丹期(体态改善)

个人笔记使用。 01 肱骨前移 1.放松肩前束 2.放松肩后束 2.5kg哑铃侧展 泡沫轴上下滚 招财猫 肱二头 02 溜肩 宽距的坐姿划船 上顶

【已开源】UniApp+vue3跨端应用从0到1开发指南、uniapp+vue3模板应用

在跨端开发日益成为主流的今天,如何高效构建规范、可维护的企业级应用?本文以UniAppVue3* *TypeScript**为核心技术栈,手把手带你从零搭建高标准的跨平台项目。 通过本文,你将系统掌握: ✅ 环境配置:Node…

线程池设计

线程池实际上也是一个生产者消费者模型&#xff0c;线程池可以让多个线程去任务队列中取任务&#xff0c;执行任务&#xff0c;适用于需要大量的线程来完成任务且完成任务的时间较短。 #include "log.hpp" #include <mutex> #include <condition_variable&…

黑盒测试的正交实验法

背景: 利用因果图法、判定表法可以帮助我们对于输入数据的组合情况进行用例设计&#xff0c;但当输入数据的组合数量巨大时&#xff0c;由于不太可能覆盖到每个输入组合的测试情况&#xff0c;因果图法或判定表法可能就不太适用了&#xff0c;可以采用正交实验法、来合理地减少…

Linux内核编程

linux 系 统 在 2 4 4 0 上 的 启 动 过 程 分 三个 阶 段 u-boot的启动 1.先分清寄存器的分类 RAM的分类 ROM的分类 Mini2440开发板的存 储器配置 Mini2440开发板板载: 1. 64MB sdram; 2. 256MB nand-flash; 3. 2MB nor-flash; 4. s3c2440内部还有4KB iram; Mini2440的启…

黑盒测试的判定表法(能对多条件依赖关系进行设计测试点)

定义: 判定表是分析和表达多逻辑条件下执行不同操作的工具。就是指把所有的输入条件、所有可能采取的动作按表格列出来&#xff0c;每一种条件和动作的组合构成一条规则&#xff0c;也即一条用例。 1.判定表法的引用 等价类边界值分析法主要关注单个输入类条件的测试并未考虑…

从零构建大语言模型全栈开发指南:第四部分:工程实践与部署-4.1.2ONNX格式转换与TensorRT部署

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 从零构建大语言模型全栈开发指南-第四部分:工程实践与部署4.1.2 ONNX格式转换与TensorRT部署1. 模型部署的核心挑战与价值2. ONNX格式转换技术详解2.1 ONNX技术栈组成2.2 转换流程与关键技术2.3 转换常…

免费下载 | 2025年网络安全报告

报告总结了2024年的网络安全态势&#xff0c;并对2025年的安全趋势进行了预测和分析。报告涵盖了勒索软件、信息窃取软件、云安全、物联网设备安全等多个领域的安全事件和趋势&#xff0c;并提供了安全建议和最佳实践。 一、报告背景与目的 主题&#xff1a;2024企业信息安全峰…

基于Real-Sim-Real循环框架的机器人策略迁移方法

编辑&#xff1a;陈萍萍的公主一点人工一点智能 基于Real-Sim-Real循环框架的机器人策略迁移方法本文通过严谨的理论推导和系统的实验验证&#xff0c;构建了一个具有普适性的sim-to-real迁移框架。https://mp.weixin.qq.com/s/cRRI2VYHYQUUhHhP3bw4lA 01 摘要 本文提出的Rea…

语义分析(编译原理)

1.什么是语义分析: 前两个阶段&#xff0c;词法分析是从字符到单词的一级识别&#xff0c;保证了每个单词的形式是正确的&#xff0c; 语法分析是由单词到语法树的一级识别&#xff0c;如果不符合语法规则就不能建树&#xff0c;因此保证了各个语法成分的构成是正确的 词法分…

蓝桥杯备考---》贪心算法之矩阵消除游戏

我们第一次想到的贪心策略一定是找出和最大的行或者列来删除&#xff0c;每次都更新行和列 比如如图这种情况&#xff0c;这种情况就不如直接删除两行的多&#xff0c;所以本贪心策略有误 so我们可以枚举选的行的情况&#xff0c;然后再贪心的选择列和最大的列来做 #include …