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

推荐订阅源

G
Google Developers Blog
阮一峰的网络日志
阮一峰的网络日志
A
About on SuperTechFans
大猫的无限游戏
大猫的无限游戏
Engineering at Meta
Engineering at Meta
V
Visual Studio Blog
Martin Fowler
Martin Fowler
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园 - 叶小钗
I
InfoQ
B
Blog RSS Feed
aimingoo的专栏
aimingoo的专栏
Y
Y Combinator Blog
Blog — PlanetScale
Blog — PlanetScale
IT之家
IT之家
P
Proofpoint News Feed
WordPress大学
WordPress大学
小众软件
小众软件
B
Blog
MongoDB | Blog
MongoDB | Blog
人人都是产品经理
人人都是产品经理
量子位
Hugging Face - Blog
Hugging Face - 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 编程 - 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 中实现函数式编程风格的重要工具,适合编写短小、临时的内联函数。掌握它的使用可以让你写出更简洁高效的代码,但要记住:清晰胜于简洁——当逻辑变复杂时,请回归普通函数。