首页 > 解决方案 > 高阶函数和装饰器有什么区别?

问题描述

我确实理解高阶函数是将函数作为参数或返回函数的函数。我也知道装饰器是为其他函数添加一些功能的函数。它们到底是什么。它们是作为参数传入的函数,还是它们本身的高阶函数?

注意:如果你会给一个例子,请在 python 中给出它

标签: python

解决方案


高阶函数是将函数作为参数的函数 OR* 返回函数。

Python 中的装饰器(通常)是高阶函数的示例,但有些装饰器不是(类装饰器**和不是函数的装饰器),还有一些高阶函数不是t 装饰器,例如那些带有两个必需参数的函数。

不是装饰器,不是高阶函数:

def hello(who):
    print("Hello", who)

不是装饰器,而是高阶函数:

def compose(f, g):
    def wrapper(*args, **kwargs):
        return g(f(*args, **kwargs))
    return wrapper

装饰器,而不是高阶函数:

def classdeco(cls):
    cls.__repr__ = lambda self: "WAT"
    return cls

# Usage:
@classdeco
class Foo:
    pass

装饰器,高阶函数:

def log_calls(fn):
    def wrapper(*args, **kwargs):
        print("Calling", fn.__name__)
        return fn(*args, **kwargs)
    return wrapper

* 不是 XOR
** 你是否认为类装饰器是高阶函数,因为类是可调用的等等,我猜是有争议的。


推荐阅读