Python 高阶函数
高阶函数(Higher-order functions)是指能够接收一个或多个函数作为参数,或返回另一个函数的函数。在 Python 中,高阶函数是非常强大且灵活的工具,广泛应用于函数式编程。
高阶函数的原理
高阶函数具有以下两个主要特点:
- 函数作为参数传递:函数可以作为另一个函数的参数。
- 返回值是函数:一个函数可以返回另一个函数作为其结果。
常见的高阶函数及详细讲解
map()
filter()
reduce()
sorted()
- 自定义高阶函数
1. map()
map()
函数会将一个函数应用到一个可迭代对象(如列表)中的每个元素,并返回一个迭代器。
语法:
map(function, iterable, ...)
function
:要应用到每个元素的函数。iterable
:要迭代的序列。
示例:使用 map()
将列表中的每个数字平方。
def square(x):return x * xnumbers = [1, 2, 3, 4, 5]
squared_numbers = map(square, numbers)print(list(squared_numbers)) # 输出: [1, 4, 9, 16, 25]
2. filter()
filter()
函数会过滤一个可迭代对象中的元素,只有函数返回 True 的元素会被保留下来。
语法:
filter(function, iterable)
function
:用来测试每个元素的函数,返回值为 True 或 False。iterable
:要迭代的序列。
示例:使用 filter()
过滤掉列表中的奇数。
def is_even(n):return n % 2 == 0numbers = [1, 2, 3, 4, 5, 6]
even_numbers = filter(is_even, numbers)print(list(even_numbers)) # 输出: [2, 4, 6]
3. reduce()
reduce()
函数会对一个可迭代对象中的元素进行累积计算。需要导入 functools
模块。
语法:
from functools import reduce
reduce(function, iterable[, initializer])
function
:接收两个参数的函数。iterable
:要迭代的序列。initializer
(可选):初始值。
示例:使用 reduce()
计算列表中所有元素的乘积。
from functools import reducedef multiply(x, y):return x * ynumbers = [1, 2, 3, 4, 5]
product = reduce(multiply, numbers)print(product) # 输出: 120
4. sorted()
sorted()
函数会对一个可迭代对象进行排序。可以接受一个函数作为 key
参数,根据该函数的返回值进行排序。
语法:
sorted(iterable, *, key=None, reverse=False)
iterable
:要排序的序列。key
(可选):用来生成排序键的函数。reverse
(可选):如果为 True,降序排序。
示例:根据字符串长度排序。
words = ['apple', 'banana', 'cherry', 'date']
sorted_words = sorted(words, key=len)print(sorted_words) # 输出: ['date', 'apple', 'banana', 'cherry']
5. 自定义高阶函数
你也可以编写自己的高阶函数,以便接收和返回函数。
示例:定义一个高阶函数,接收一个函数作为参数,并返回一个包装后的函数。
def logger(func):def wrapper(*args, **kwargs):print(f'Calling function {func.__name__}')result = func(*args, **kwargs)print(f'Function {func.__name__} returned {result}')return resultreturn wrapper@logger
def add(a, b):return a + bprint(add(3, 4)) # 输出: 调用日志和结果
高阶函数的使用场景
- 数据处理和转换:使用
map()
、filter()
等函数对数据进行批量处理和转换。 - 复杂操作的简化:使用
reduce()
对数据进行累积操作。 - 自定义逻辑的封装:通过高阶函数实现装饰器等功能,封装复杂的逻辑。
总结
高阶函数是 Python 中非常强大的工具,能够使代码更加简洁和易读。理解高阶函数的原理和使用场景,可以让你在编写 Python 程序时更加高效。通过上述示例,你可以看到如何使用内置高阶函数 map()
、filter()
、reduce()
和 sorted()
,以及如何自定义高阶函数。