什么是高阶函式?
在 Python 中,函数不仅可以接受数值、字串等基本数据类型作为参数,还可以接受其他函数作为参数,甚至可以返回一个函数。这种将函数作为变数来使用的特性,就是所谓的 高阶函数 (Higher-Order Function)。
高阶函式的应用场景
- 回呼函数 (Callback function): 将函数作为参数传递给另一个函数,以便在特定的事件发生时执行。
- 装饰器 (Decorator): 用来修改其他函数的功能,例如,添加日志记录、性能测量等。
- lambda 表达式: 一种匿名函数,可以简化函数的定义。
- map、filter、reduce: Python 内建的高阶函数,用于对可迭代对象进行映射、过滤和归约操作。
map(function, iterable) | 将函数应用于可迭代对象的每个元素,并返回一个新的迭代器。 | list(map(lambda x: x*2, [1, 2, 3])) → [2, 4, 6] |
filter(function, iterable) | 过滤可迭代对象中的元素,返回一个新的迭代器,其中包含使函数返回 True 的元素。 | list(filter(lambda x: x % 2 == 0, [1, 2, 3, 4])) → [2, 4] |
reduce(function, iterable) | 将函数应用于可迭代对象的元素,从左到右累积结果。 | from functools import reduce; reduce(lambda x, y: x+y, [1, 2, 3]) → 6 |
范例:使用高阶函数实现排序
def sort_by_length(words):
"""根据字串长度排序"""
return sorted(words, key=len)
words = [\'apple\', \'banana\', \'cherry\']
print(sort_by_length(words)) # 输出: [\'apple\', \'cherry\', \'banana\']
在上面的例子中,sorted 函数是一个高阶函数,它接受一个 key 参数,这个参数是一个函数,用于指定排序的关键字。我们传入了一个 lambda 表达式 len 作为 key,表示根据每个元素的长度进行排序。
高阶函数的好处
程式码更简洁: 高阶函数可以减少重复代码,提高程式码的可读性。程式码更灵活: 通过传递不同的函数作为参数,可以实现不同的功能。函数式程式设计: 高阶函数是函数式程式设计的重要概念,它可以帮助我们写出更抽象、更具有表达力的程式码。
关键点:
- 函数可以作为变数传递
- 函数可以作为参数
- 函数可以返回函数