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
** 你是否认为类装饰器是高阶函数,因为类是可调用的等等,我猜是有争议的。
推荐阅读
- java - 如何在录音时在语音笔记上设置计时器(与 WhatsApp 语音消息录制功能相同)?
- docker - Microk8s 无法从私有注册表中提取
- php - 如何根据文件名检查我的目标文件从公共目录的扩展名?
- sql - 在 linq to sql 中进行子选择
- java - Spring Boot 安全性在成功登录后将用户重定向到主页,而不是在登录页面请求之前的页面
- php - 为特定会话设置特定会话超时
- android - 寻找Andengine 64位版本
- c# - 在表单应用程序中刷新 EntityFramework
- ios - 如何在运行时更改渐变层的框架?
- python - 如何读取目录中的所有pdf文件并使用tesseract python 3转换为文本文件?