Python中的高阶函数是指这类函数:它们不仅可以接收常规的数据类型作为参数,还可以接收其他函数作为参数,并且可能将函数作为其操作的一部分或者结果返回。高阶函数体现了函数式编程的特点,在Python中它们主要用于处理函数的抽象和数据的转换。
下面是一些Python中常见的高阶函数及其用途:
map(function, iterable...)
map
函数接收一个函数和一个或多个可迭代对象作为参数,它会将给定函数应用于各个可迭代对象的所有元素上,并返回一个包含每次函数应用结果的新迭代器。
示例:
def square(x): return x ** 2 numbers = [1, 2, 3, 4] squares = map(square, numbers) print(list(squares)) # 输出:[1, 4, 9, 16]
filter(function, iterable)
filter
函数同样接收一个函数和一个可迭代对象,它会将函数应用到可迭代对象的每个元素上,仅保留函数返回值为真的元素,并返回一个包含这些元素的新迭代器。
示例:
def is_even(n): return n % 2 == 0 numbers = [1, 2, 3, 4, 5, 6] even_numbers = filter(is_even, numbers) print(list(even_numbers)) # 输出:[2, 4, 6]
reduce(function, iterable[, initializer])
reduce
函数来自于functools
模块(Python 3.x中需要显式导入),它对可迭代对象中的元素进行累积计算,将函数应用到序列的第一个和第二个元素,然后将结果与第三个元素一起再应用函数,依此类推,直到序列结束,最后返回一个单一的累积结果。
示例:
from functools import reduce def add(a, b): return a + b numbers = [1, 2, 3, 4, 5] sum_of_numbers = reduce(add, numbers) print(sum_of_numbers) # 输出:15
sorted(iterable, key=None, reverse=False)
sorted
函数可以对可迭代对象进行排序,并可以接收一个key
参数,该参数是一个函数,用于确定排序时所依据的值。
示例:
words = ['apple', 'banana', 'cherry', 'date'] by_length = sorted(words, key=len) print(by_length) # 输出:['date', 'apple', 'cherry', 'banana'] # 使用lambda表达式作为key参数 numbers = [4, 2, 9, 1, 5] ascending = sorted(numbers, key=lambda x: x) descending = sorted(numbers, key=lambda x: x, reverse=True) print(ascending) # 输出:[1, 2, 4, 5, 9] print(descending) # 输出:[9, 5, 4, 2, 1]
此外,还有其他一些类似的高阶函数,例如 functools.partial
用于创建部分预设参数的函数,以及列表推导式和生成器表达式也可以视为某种意义上的高阶结构,尽管它们不是严格意义上的函数。高阶函数使得Python代码更加简洁高效,并且鼓励了函数式的编程风格。