第23天:lambda函数与高阶函数
·
目标:
- 理解并掌握
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)是指:
- 接受一个或多个函数作为输入参数。
- 返回一个函数作为输出结果。
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 中的其他高级特性,例如生成器、迭代器、上下文管理器等。这些特性能够帮助我们编写更高效、灵活的代码。
任务:
- 使用
lambda函数和map来将字符串列表转换为它们的长度列表。 - 使用
filter和lambda筛选出列表中的所有正数。 - 使用
reduce和lambda来计算一个数字列表的加权平均值(例如权重是列表中的索引)。
更多推荐



所有评论(0)