什么是python中的高阶函数

**高阶函数(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]

一句话收尾:高阶函数让你“把变化的部分(行为)注入进去”,从而写出更通用、更可复用的代码;简单场景偏向推导式,复杂控制流用装饰器/闭包抽象最合适。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MonkeyKing.sun

对你有帮助的话,可以打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值