Python - 所有内置装饰器是啥? [关闭]

Posted

技术标签:

【中文标题】Python - 所有内置装饰器是啥? [关闭]【英文标题】:Python - what are all the built-in decorators? [closed]Python - 所有内置装饰器是什么? [关闭] 【发布时间】:2010-10-03 13:41:56 【问题描述】:

我知道@staticmethod@classmethod@property,但只是通过分散的文档。 Python 中内置的所有函数装饰器是什么?是在文档中吗?是否在某处维护了最新列表?

【问题讨论】:

没有官方名单,但是这个链接很有用:github.com/lord63/awesome-python-decorator 最著名的是:@staticmethod@classmethod@property@wraps@timeit 【参考方案1】:

我不这么认为。装饰器与普通函数没有区别,你只是用一种更花哨的方式来称呼它们。

要找到所有这些,请尝试搜索Built-in functions 列表,因为正如您在Python glossary 中看到的那样,装饰器语法只是语法糖,因为以下两个定义创建了相同的函数(从词汇表中复制了此示例):

def f(...):
    ...
f = staticmethod(f)

@staticmethod
def f(...):

所以任何返回另一个函数的内置函数都可以用作装饰器。问题是——这样使用它有意义吗? :-)

functools 模块包含一些可用作装饰器的函数,但它们不是您要求的内置函数。

【讨论】:

【参考方案2】:

它们不是内置的,但 this library 的示例装饰器非常好。

作为 Abgan says,内置函数列表可能是最好的查看位置。虽然,由于装饰器也可以实现为类,但不能保证它是全面的。

【讨论】:

【参考方案3】:

装饰器甚至不需要返回一个函数。我以前用过@atexit.register

【讨论】:

嗯,那个返回的函数与传递给它的函数相同。 哦,是吗?我从来没有注意到。 “装饰器甚至不需要返回一个函数”——为了有意义,他们应该这样做,因为@decor 只是f = decor(f) 的糖——否则你会失去引用你正在装饰的函数。 @Dan,你知道@property 不会返回函数,是吗? @Sasszem,每个函数都会返回 something。如果不出意外,你至少会得到None。无论哪种方式,都有许多非函数可调用对象。【参考方案4】:

没有所有装饰器的列表。没有所有功能的列表。没有所有类的列表。

装饰器是一种方便的工具,用于定义跨函数、方法或类的公共方面。有内置的装饰器。此外,还有许多很酷且无用的装饰器。同样,有许多很酷且无用的类。

【讨论】:

他的问题是关于内置装饰器的。必须有一个有限(并且可能相对较小)的内置装饰器列表。

以上是关于Python - 所有内置装饰器是啥? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

python装饰器是啥意思

将函数转换为字段的装饰器是啥?

python基础--定义装饰器(内置装饰器)

Python开发第十四篇装饰器

python迭代器,生成器,装饰器

Python装饰器之 property()