惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Securelist
博客园 - Franky
B
Blog RSS Feed
Apple Machine Learning Research
Apple Machine Learning Research
阮一峰的网络日志
阮一峰的网络日志
量子位
Hugging Face - Blog
Hugging Face - Blog
有赞技术团队
有赞技术团队
V
V2EX
宝玉的分享
宝玉的分享
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
F
Full Disclosure
L
LangChain Blog
大猫的无限游戏
大猫的无限游戏
雷峰网
雷峰网
G
Google Developers Blog
B
Blog
The Cloudflare Blog
T
The Blog of Author Tim Ferriss
小众软件
小众软件
博客园 - 【当耐特】
H
Help Net Security
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
Tailwind CSS Blog
博客园 - 叶小钗
Jina AI
Jina AI
Cloudbric
Cloudbric
N
Netflix TechBlog - Medium
Hacker News - Newest:
Hacker News - Newest: "LLM"
P
Proofpoint News Feed
L
Lohrmann on Cybersecurity
I
Intezer
IT之家
IT之家
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
H
Hackread – Cybersecurity News, Data Breaches, AI and More
WordPress大学
WordPress大学
W
WeLiveSecurity
G
GRAHAM CLULEY
J
Java Code Geeks
H
Heimdal Security Blog
Cyberwarzone
Cyberwarzone
MyScale Blog
MyScale Blog
Latest news
Latest news
Schneier on Security
Schneier on Security
H
Hacker News: Front Page
Martin Fowler
Martin Fowler
V
Visual Studio Blog
Webroot Blog
Webroot Blog
P
Palo Alto Networks Blog
T
Tor Project blog

博客园 - 箫笛

Tkinter - Entry 输入框组件 Tkinter - Button 组件 Tkinter - Label 组件 Tkinter - tk 变量 Tkinter - 事件与绑定 Tkinter - 几何管理器 Tkinter - 核心概念 Tkinter - 快速开始 Tkinter - 介绍 Python 编程 - 条件表达式 Python 编程 - 星号下划线参数释义 shell 编程 - shell 脚本的交互方式 Python insall - macOS 系统安装python的几种方式 Miniconda - Python 环境管理工具 Tkinter - Python GUI 开发 Python 编程 - 下划线命名的区别 Python 编程 - 元类编程 Python 编程 - 多重继承与MRO Python 编程 - 描述符协议 Python 编程 - 类型注解 Python 编程 - 生成器表达式 Python 编程 - 集合 Python 编程 - 装饰器 Python 编程 - 闭包 Python 编程 - 列表推导式 Python 编程 - 函数式编程 Python 编程 - 文件操作 Python 编程 - 输入与输出 Python 编程 - 面向对象编程 Python 编程 - 元组(tuple) Python 编程 - 字符串(str) Python 编程 - 字典(dict) Python 编程 - 列表(list) Python 编程 - 数据类型和数据结构 Python 编程 - 语句 Python 编程 - 函数 windows - WSL 的安装与使用 shell编程 - dialog 程序使用指南 FE Team - 如何做好前端代码审查 git 提交的撤销和恢复 React15 - redux-saga 如何在saga中实现轮询接口调用? React15 - React CSS Modules BEM命名实践 React15 - React 15 中 componentWillReceiveProps 为什么会多次调用, 同时componentDidUpdate 也会多次调用? React15 - React15类组件多次执行render方法的原因? React15 - React15应用中代码逻辑复用方案 React15 - React状态同步问题解决 React15 - React 15 中 React.pureComponent 的使用场景 React15 - React 15应用在页面渲染时会多次执行类组件的render 函数的原因 React15 - React 15 中能用 componetDidUpdate 代替 componentWillReceiveProps 吗? React15 - React 15 生命周期函数详解 React15 - 如何在React 15中实现自定义的事件订阅与发送(例如组件间通信) React15 - React15应用中的事件订阅和发送机制 React15 - CSS中的BEM规范 React15 - React CSS Modules BEM命名实践 React15 - 写sass 样式文件,嵌套的结构好,还是扁平的结构好? React15 - sass 中 @mixin 和 @extend 的区别是什么? React15 - React 15 应用 如何使用Css moudules 方式进行模块化开发 React15 - React15应用Sass使用指南 React15 - React 15 应用如何进行性能优化?
Python 编程 - lambda 函数
箫笛 · 2026-06-21 · via 博客园 - 箫笛

在 Python 3 中,lambda 表达式(有时也写作“lambda 函数”)是一种创建匿名函数的简洁方式。所谓匿名,就是它没有显式的函数名,通常用于只需要一次使用的简单场景。


1. 基本语法

lambda 参数1, 参数2, ... : 表达式
  • 参数:和普通函数一样,可以有零个或多个参数,用逗号分隔。
  • 表达式:只能是一个单行表达式,不能包含赋值、循环、条件分支等语句(但可以使用条件表达式 x if cond else y)。
  • 返回值:表达式的计算结果会自动作为返回值,无需写 return

2. 简单示例

# 普通函数
def add(x, y):
    return x + y

# 等价的 lambda
add_lambda = lambda x, y: x + y

print(add_lambda(3, 5))  # 输出 8

注意:虽然可以把 lambda 赋值给变量,但这违背了“匿名”的初衷,更常见的用法是直接作为参数传递


3. 典型使用场景

3.1 作为排序的 key 参数

students = [("Alice", 25), ("Bob", 20), ("Charlie", 23)]
# 按年龄排序
students.sort(key=lambda student: student[1])
print(students)  # [('Bob', 20), ('Charlie', 23), ('Alice', 25)]

3.2 与 filter() 配合过滤

numbers = [1, 2, 3, 4, 5, 6]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers)  # [2, 4, 6]

3.3 与 map() 配合转换

numbers = [1, 2, 3]
squared = list(map(lambda x: x ** 2, numbers))
print(squared)  # [1, 4, 9]

3.4 与 reduce() 配合累计(需从 functools 导入)

from functools import reduce
product = reduce(lambda a, b: a * b, [1, 2, 3, 4])
print(product)  # 24

4. 与普通函数(def)的区别

特性 lambda def
名称 匿名(没有函数名) 有明确名称
函数体 仅限单个表达式 可以包含多条语句(循环、条件、赋值等)
返回值 自动返回表达式结果 需显式 return
可读性 简洁,但复杂逻辑时难以阅读 结构化,适合复杂逻辑
调试 栈跟踪中显示为 <lambda>,不易定位 显示函数名,便于调试
可重用性 通常一次性使用 可多次调用和复用

5. 注意事项

  • 不要滥用:当逻辑稍复杂时,建议使用 def 定义普通函数,以提高代码可读性。
  • 不能包含语句:比如 lambda x: print(x) 是合法的(print 是表达式,返回 None),但 lambda x: x=1 会报错。
  • 类型:lambda 也是 function 类型的对象,可以像普通函数一样被调用。

6. Python 2 与 Python 3 的差异

在 Python 3 中,lambda 的行为基本没有变化,但需要注意:

  • print 在 Python 2 中是语句,不能在 lambda 中直接使用(除非 from __future__ import print_function),而 Python 3 中 print 是函数,可以直接用于 lambda。
  • Python 3 中 reduce() 被移到了 functools 模块,需要使用前导入。

7. 小结

lambda 是 Python 中实现函数式编程风格的重要工具,适合编写短小、临时的内联函数。掌握它的使用可以让你写出更简洁高效的代码,但要记住:清晰胜于简洁——当逻辑变复杂时,请回归普通函数。