Python-什么是内置装饰器?[关闭]


70

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


2
没有官方列表,但是此链接很有用:github.com/lord63/awesome-python-decorator
— Casebash

1
最著名的是:@staticmethod,@classmethod,@property,@wraps,@timeit
— 清淳沙阿

Answers:


40

我不这么认为。装饰器与普通功能没有什么不同,您只能以更奇特的方式调用它们。

要找到所有这些,请尝试搜索“内置函数”列表,因为如您在Python词汇表中所见,装饰器语法只是一种语法糖,因为以下两个定义创建了相等的函数(此示例从词汇表中复制):

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

@staticmethod
def f(...):

因此,任何返回另一个函数的内置函数都可以用作装饰器。问题是-以这种方式使用是否有意义?:-)

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


17

它们不是内置的,但是这个示例装饰器库非常好。

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


1

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


1
好吧,那个函数返回用于此目的的相同函数。
— 本杰明·彼得森

1
哦,是吗?我没注意到
— 哈比人2009年

2
“装饰器甚至不需要返回一个函数”-为了使它有意义,尽管如此,它们应该这样做,因为@decor这只是为了解决问题f = decor(f)-否则您将失去对正在装饰的函数的引用。
— 丹·伯顿

7
@Dan,您知道它@property不返回函数,是吗?
— 哈比人2011年

3
@Sasszem,每个函数都返回一些内容。如果没有其他要求,您至少会得到None。无论哪种方式,都有许多不可调用的对象。
— 哈比人

-5

没有所有装饰器的列表。没有所有功能的列表。没有所有课程的清单。

装饰器是用于在函数,方法或类之间定义公共方面的便捷工具。有内置的装饰器。另外,还有许多很酷且无用的装饰器。同样,有许多很酷且无用的类。


他的问题是关于内置装饰器的。内置装饰器必须有一个有限的列表(并且可能相对较小)。
— 彼得·斯科恩
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.