<pre class="lang-py prettyprint-override"><code>def outsideFunc(func):
def insideFunc():
print("Executing Inside Function")
print(func())
print("End Inside Function")
return insideFunc
</code></pre>
<p>这个外部函数所做的是创建一个函数(内部函数,它调用您传递给外部函数的内容),然后将该函数返回给调用者。它实际上并没有调用内部函数</p>
<p>Python中的函数是第一类对象,可以像其他对象一样传递并绑定到其他名称</p>
<p>下面描述了调用此外部函数的两种方式:</p>
<pre class="lang-py prettyprint-override"><code># This passes `printer` to the outside function and it returns a function
# that will call it. It proceeds to throw away that function since you don't
# actually bind it to anything.
outsideFunc(printer)
# The first line below does exactly the same as the line above but it
# binds the function to the display name.
# The second line then uses that name to CALL the function, running
# the code within it.
display = outsideFunc(printer)
display()
</code></pre>
<p>功能差异的功能/结果类似于以下内容:</p>
<pre class="lang-py prettyprint-override"><code>def fortyTwo():
return 42
print(fortyTwo)
print(fortyTwo())
twiceTwentyOne = fortyTwo
print(twiceTwentyOne)
print(twiceTwentyOne())
</code></pre>
<p>第一个<code>print</code>将简单地打印函数本身的表示,类似于<code><function fortyTwo at 0x7f9822dcb4c0></code>。第二个函数实际上将调用该函数并打印出它返回的内容。它知道如何调用它,就是名称后面有<code>()</code></p>
<p>最后三行显示绑定到另一个名称的函数,您也可以调用该名称以获得相同的效果</p>
<hr/>
<p>另外,如果希望两个代码段在函数中相同,则需要调用第一种情况下返回的函数,如下所示:</p>
<pre class="lang-py prettyprint-override"><code>outsideFunc(printer)()
</code></pre>