擅长:python、mysql、java
<p>知道什么是装饰效果很重要:</p>
<pre><code>@decorator
def f():
…
</code></pre>
<p>只是语法上的糖</p>
^{pr2}$
<p>因此,如果decorator不做任何事情,那么当<em>调用</em>修饰函数时就不会有任何开销(但是调用<code>decorator(f)</code>确实需要一点时间),比如</p>
<pre><code>decorator = lambda func: func
@decorator
def f():
…
</code></pre>
<p>如果decorator做了什么,那么您只得到decorator所涉及的任何时间开销。这通常包括一个附加的函数调用(修饰函数的调用),如</p>
<pre><code>def decorator(func):
def decorated_func():
print "Before calling function", func # Some overhead (but that's normal)
func() # This will be a second function call, after the call to decorated_func()
return decorated_func
</code></pre>
<p>因此,就其本身而言,装饰一个函数并不会为您想做的事情增加太多的开销:原则上,您可以删除的唯一明显的开销是在修饰函数中不调用<code>func()</code>,而是复制它的完整代码,但是代码的易读性会受到影响(易读性和灵活性是装饰器首先存在的一些原因)。在</p>