擅长:python、mysql、java
<p>具有<em>任何</em>种类的参数的装饰器,命名为/关键字的参数,未命名的/位置的参数,或每种参数中的某些参数,你<strong>在<code>@name</code>行上调用</strong>而不是仅仅<strong>提及</strong>则需要一个<strong>两个</strong>级别的嵌套(而您刚才提到的decorator只有一个嵌套级别)。如果你想在<code>@</code>行中<strong>调用</strong>它们的话,这甚至适用于无参数的双嵌套修饰符</p>
<pre><code>def double():
def middling():
def inner(f):
return f
return inner
return middling
</code></pre>
<p>你会把这个当作</p>
^{pr2}$
<p>注意括号(在本例中为空,因为不需要也不需要参数):它们表示您在调用<em>调用</em><code>double</code>,它返回<code>middling</code>,它修饰<code>whatever</code>。在</p>
<p>一旦您了解了“调用”和“仅提及”之间的区别,添加(例如可选)命名参数并不难:</p>
<pre><code>def doublet(foo=23):
def middling():
def inner(f):
return f
return inner
return middling
</code></pre>
<p>可用作:</p>
<pre><code>@doublet()
def whatever ...
</code></pre>
<p>或作为:</p>
<pre><code>@doublet(foo=45)
def whatever ...
</code></pre>
<p>或等同于:</p>
<pre><code>@doublet(45)
def whatever ...
</code></pre>