Python Lambda(匿名函数)详解
                           
天天向上
发布: 2025-03-14 22:47:07

原创
231 人浏览过

Lambda 函数,也称为匿名函数,是一种在 Python 中定义简洁函数的方式。与常规的 def 定义函数不同,lambda 是一个单行函数,常用于简短的、一次性的功能场景。


1. 基本语法

Lambda 函数的基本语法为:

lambda 参数1, 参数2, ... : 表达式
  • lambda 是关键词。
  • 参数1, 参数2, ... 是函数的输入参数,可以有多个参数。
  • 表达式 是该函数的返回值,表达式的值将作为函数的输出。

Lambda 函数不需要显式的 return 语句,因为它会自动返回表达式的结果。

示例 1:最简单的 Lambda 函数

add = lambda x, y: x + y
print(add(3, 5))  # 输出 8

2. Lambda 函数的应用场景

2.1 用于函数式编程

Lambda 函数通常与 map()filter()reduce() 等函数配合使用,来对数据进行处理和转换。

示例 2:与 map() 配合使用

map() 函数接受一个函数和一个可迭代对象,返回一个将函数应用到每个元素后的新可迭代对象。

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

示例 3:与 filter() 配合使用

filter() 函数根据给定的函数和可迭代对象,返回一个过滤后的元素集合。

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

示例 4:与 reduce() 配合使用

reduce() 函数将一个二元函数应用于序列的每一项,将结果汇总为一个值。它位于 functools 模块中。

from functools import reduce

numbers = [1, 2, 3, 4]
product = reduce(lambda x, y: x * y, numbers)
print(product)  # 输出 24

3. Lambda 函数的优缺点

3.1 优点

  • 简洁性:适用于简单的、短小的函数,避免了冗长的 def 语法。
  • 匿名性:可以直接创建函数对象,而不需要为其命名,适用于一次性使用的函数。

3.2 缺点

  • 可读性差:由于 lambda 函数通常只有一行,功能较为简单,它们的可读性不如常规的函数。
  • 功能限制:Lambda 函数只能包含一个表达式,无法包含多个语句或复杂的逻辑。

4. Lambda 函数与 def 定义的比较

4.1 使用 def 定义函数

def add(x, y):
    return x + y

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

4.2 使用 lambda 定义函数

add = lambda x, y: x + y
print(add(3, 5))  # 输出 8
  • 两者的结果相同,但 lambda 函数简洁、紧凑,适用于简单的功能场景。

5. 多个参数的 Lambda 函数

Lambda 函数可以接受多个参数,也可以应用于更复杂的计算。

示例 5:多个参数

multiply = lambda x, y, z: x * y * z
print(multiply(2, 3, 4))  # 输出 24

6. Lambda 函数与其他函数结合

6.1 在 sorted() 中使用 Lambda

在对列表排序时,可以使用 Lambda 函数作为排序的关键字函数。

pairs = [(1, 2), (3, 1), (5, 4)]
pairs.sort(key=lambda x: x[1])  # 按照元组的第二个元素排序
print(pairs)  # 输出 [(3, 1), (1, 2), (5, 4)]

7. 总结

  • Lambda 函数 允许我们定义一个匿名的、简单的函数。
  • 它通常用于一次性操作或与高阶函数(如 map()filter()reduce())结合使用。
  • Lambda 函数只能包含一个表达式,适合简洁的任务,但不适合复杂逻辑。

更多详细内容请关注其他相关文章!

发表回复 0

Your email address will not be published. Required fields are marked *