擅长:python、mysql、java
<p>decorator是用于调用高阶函数的特定方法的简单语法,因此如果只关注语法,则不太可能产生显著的差异。听着,不管你说什么</p>
<pre><code>@mydecorator
def f(...):
# body of f
</code></pre>
<p>你可以这样说</p>
^{pr2}$
<p>decorator语法的优势在于它更加简洁(不重复<code>f</code>三次;-),并且它出现在</em>前的<code>def</code>(或者{<cd3>},对于类装饰器)语句,因此可以立即提醒读者代码。这很重要,但不可能是伟大的!在</p>
<p>decorator的<strong>语义</strong>(与此模式匹配的高阶函数调用的语义相同,如果没有decorator;-)。例如</p>
<pre><code>@classmethod
def f(cls, ...):
</code></pre>
<p>允许您生成类方法(特别是对于备用构造函数非常有用),以及</p>
<pre><code>@property
def foo(self, ...):
</code></pre>
<p>允许您创建只读属性(对于非只读属性,使用2.6中的其他相关装饰器;-),即使在使用<strong>不</strong>时,这些属性也非常有用(因为它们可以让您避免为本质上的属性编写大量愚蠢的“样板”访问器。。。只是因为将来访问属性可能需要触发一些计算!-). 在</p>
<p>除了内置在Python中的装饰器之外,您自己的装饰器也同样重要——当然,这取决于您的应用程序是什么。一般来说,它们可以很容易地将代码的某些部分(否则必须在许多函数和类中复制[[或者您可能不得不为类的情况求助于元类,但是那些更丰富、更复杂的正确使用]])重构到decorator中。因此,它们可以帮助您避免重复的样板代码,而且由于<strong>DRY</strong>“不要重复自己”是软件开发的一个核心原则,因此您能够得到的任何帮助都应受到衷心欢迎。在</p>