**高阶函数(Higher-Order Function)**指“把函数当作值来用”的函数:
• 接收函数作为参数,或
• 返回一个函数(或两者兼有)。
这建立在 Python 的一等函数之上。
常见例子
• 作为参数传入
nums = [5, 2, 9, 1]
print(sorted(nums, key=lambda x: x % 3)) # key 本身就是函数
其它:map(f, it), filter(pred, it), functools.reduce(func, it),any(pred(x) for x in it), all(…)。
• 返回一个函数(闭包/装饰器)
def power(n: int):
def f(x: float) -> float:
return x ** n
return f
square = power(2)
print(square(3)) # 9
• 装饰器就是典型高阶函数
import time
def timing(fn):
def wrapper(*a, **kw):
t0 = time.perf_counter()
try:
return fn(*a, **kw)
finally:
print(f"{fn.__name__} took {time.perf_counter()-t0:.3f}s")
return wrapper
@timing
def work(n): sum(range(n))
work(1_000_000)
什么时候用?
• 把“行为”抽出来做参数(排序规则、过滤条件、转换函数)。
• 复用控制流程(重试、缓存、计时、鉴权、事务),把差异点通过函数注入。
• 构建流水线/组合:
from functools import reduce
def compose(*fs):
return reduce(lambda f, g: lambda x: f(g(x)), fs)
to_str = compose(str.strip, str.lower)
print(to_str(" Hello ")) # "hello"
实战小对比
• 可读性优先:多数场景 list/dict 推导式比 map/filter 更直观:
[x+1 for x in nums if x % 2 == 0] # 通常优于 map/filter 组合
• 聚合优先用专用函数:sum/any/all 往往比 reduce 清晰。
类型提示(更稳)
from typing import Callable, Iterable, TypeVar
T = TypeVar("T"); U = TypeVar("U")
def map_custom(f: Callable[[T], U], xs: Iterable[T]) -> list[U]:
return [f(x) for x in xs]
一句话收尾:高阶函数让你“把变化的部分(行为)注入进去”,从而写出更通用、更可复用的代码;简单场景偏向推导式,复杂控制流用装饰器/闭包抽象最合适。
1277

被折叠的 条评论
为什么被折叠?



