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 - 所有内置装饰器是啥? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章