目标:
  • 理解并掌握 lambda 函数的使用。
  • 掌握高阶函数的概念及其应用,学习 Python 中常用的高阶函数如 map、filter 和 reduce。

1. 什么是 lambda 函数?

lambda 函数是一种简洁的匿名函数,也被称为“匿名函数”或“内联函数”。它允许我们在一行代码内定义简单的函数。lambda 函数常常用于需要短小函数的地方。

1.1 lambda 函数的基本语法
lambda arguments: expression
  • arguments:函数的参数(可以是多个)。
  • expression:函数的返回值(必须是单个表达式)。
1.2 简单示例
# 定义一个 lambda 函数,返回两个数的和
add = lambda x, y: x + y

# 调用 lambda 函数
result = add(3, 5)
print(result)  # 输出:8
  • lambda x, y: x + y 是一个匿名函数,它接受两个参数 x 和 y,并返回它们的和。
1.3 lambda 函数的应用

lambda 函数常用于以下情况:

  • 简单的函数定义,避免定义完整的 def 函数。
  • 在一些需要函数作为参数的函数中,如 map、filter、sorted 等。
1.4 使用 lambda 函数与 map 结合

map 函数可以接受一个函数和一个可迭代对象,将该函数应用到可迭代对象的每一个元素上。

numbers = [1, 2, 3, 4, 5]

# 使用 lambda 函数将每个元素平方
squared = list(map(lambda x: x**2, numbers))

print(squared)  # 输出:[1, 4, 9, 16, 25]
  • 在此示例中,lambda 函数被用于 map 中来平方列表中的每个数字。

2. 什么是高阶函数?

高阶函数(Higher-Order Function)是指:

  1. 接受一个或多个函数作为输入参数。
  2. 返回一个函数作为输出结果。

Python 中许多内置函数都是高阶函数,它们允许你将函数作为参数传递,或者返回函数。常见的高阶函数包括 map、filter 和 reduce。

2.1 map 函数

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

numbers = [1, 2, 3, 4, 5]

# 使用 map 和 lambda 计算每个数字的平方
squared = map(lambda x: x**2, numbers)

# 转换成列表输出
print(list(squared))  # 输出:[1, 4, 9, 16, 25]
  • map 将 lambda x: x**2 应用于列表中的每个元素,并返回一个新的列表。
2.2 filter 函数

filter 函数用于过滤可迭代对象中的元素,返回一个新的迭代器,只有当函数返回 True 时,元素才会被包含在结果中。

numbers = [1, 2, 3, 4, 5, 6]

# 使用 filter 和 lambda 筛选出偶数
even_numbers = filter(lambda x: x % 2 == 0, numbers)

# 转换成列表输出
print(list(even_numbers))  # 输出:[2, 4, 6]
  • filter 函数将 lambda x: x % 2 == 0 应用于列表中的每个元素,过滤出所有的偶数。
2.3 reduce 函数

reduce 函数是 functools 模块中的一个函数,它将一个二元操作(两个输入项)应用到一个序列中的每对元素,最后返回一个累积结果。

from functools import reduce

numbers = [1, 2, 3, 4, 5]

# 使用 reduce 和 lambda 求列表元素的乘积
product = reduce(lambda x, y: x * y, numbers)

print(product)  # 输出:120
  • reduce 函数将 lambda x, y: x * y 应用于列表中的元素,计算所有元素的乘积。

3. lambda 函数与高阶函数的结合

lambda 函数与高阶函数结合,常常用于对数据进行更简洁的操作。例如,使用 map 和 lambda 进行数据转换,使用 filter 和 lambda 进行数据筛选,使用 reduce 和 lambda 进行累积计算。

3.1 综合示例:计算列表中所有偶数的平方和
from functools import reduce

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]

# 使用 filter 和 lambda 筛选偶数
even_numbers = filter(lambda x: x % 2 == 0, numbers)

# 使用 map 和 lambda 计算偶数的平方
squared_evens = map(lambda x: x**2, even_numbers)

# 使用 reduce 和 lambda 计算平方偶数的和
sum_of_squares = reduce(lambda x, y: x + y, squared_evens)

print(sum_of_squares)  # 输出:120
  • 该示例结合了 filter、map 和 reduce,首先筛选出偶数,接着计算每个偶数的平方,最后求出平方的和。

4. 总结

  • lambda 函数:用于创建简洁的匿名函数,常用于高阶函数的参数。
  • 高阶函数:接受函数作为参数或者返回一个函数的函数。常见的高阶函数包括 map、filter 和 reduce。
  • 结合使用:lambda 函数与高阶函数(如 map、filter、reduce)结合,可以使代码更加简洁和高效。

5. 明天的学习计划

明天我们将继续学习 Python 中的其他高级特性,例如生成器、迭代器、上下文管理器等。这些特性能够帮助我们编写更高效、灵活的代码。


任务:

  1. 使用 lambda 函数和 map 来将字符串列表转换为它们的长度列表。
  2. 使用 filter 和 lambda 筛选出列表中的所有正数。
  3. 使用 reduce 和 lambda 来计算一个数字列表的加权平均值(例如权重是列表中的索引)。
Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐