Python 编程 - lambda 函数

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

posted @ 2026-06-21 18:33  箫笛  阅读(28)  评论(0)    收藏  举报