<p>圆括号是用来运行函数的,但是没有它们,名称仍然像变量一样引用函数。在</p>
<pre><code>return myFunc() + 1
</code></pre>
<p>这将计算<code>myFunc</code>函数,将1加到它的值上,然后返回该值。为了使函数运行并返回一个数值,需要括号。在</p>
^{pr2}$
<p>这实际上并不是在运行<code>addOneInside</code>,它只是将函数作为变量返回。您可以将其指定给另一个名称,并将其存储以供以后使用。理论上你可以这样做:</p>
<pre><code>plusOne = addOneInside
plusOne()
</code></pre>
<p>它实际上会调用<code>addOneInside</code>函数。在</p>
<p>初始问题中的特定实例称为Decorator,它是一种对传递给函数的参数执行代码的方法。您的示例不太实用,但我可以修改它以显示一个简单的用例。在</p>
<p>假设您只希望将正数传递给函数。如果传递给<code>myFunc</code>一个负数,则需要将其更改为0。你可以用这样的装饰工来处理。在</p>
<pre><code>def addOne(myFunc):
def addOneInside(num):
if num < 0:
num = 0
return myFunc(num)
return addOneInside # < -here is the question
@addOne
def oldFunc(number):
return number
</code></pre>
<p>为了解释,<code>@addOne</code>是装饰语法,它附加了<code>addOneInside</code>函数,以便在调用{<cd7>}的参数时调用它。下面是一些输出示例:</p>
<pre><code>oldFunc(-12)
>>> 0
oldFunc(12)
>>> 12
</code></pre>
<p>所以现在可以向<code>oldFunc</code>添加独立于参数解析逻辑的逻辑。您还可以相对容易地更改允许的参数。可能还有一个要达到的最大上限,或者您希望它记录下来,或者注意该值不应为负。您还可以将这个decorator应用于多个函数,它将对所有函数执行相同的操作。在</p>
<p><a href="http://simeonfranklin.com/blog/2012/jul/1/python-decorators-in-12-steps/" rel="nofollow">This blogpost</a>为我解释了很多,所以如果这些信息太简短而不清楚,请尝试阅读那里的详细解释。在</p>