擅长:python、mysql、java
<p>执行<code>cake()</code>时,将运行以下块:</p>
<pre><code>print('beets')
def pie():
print('sweets')
return 'cake'
return pie
</code></pre>
<p>所以它:</p>
<ul>
<li>打印<code>beets</code></li>
<li>执行<code>pie</code>函数定义,函数体尚未运行,因此没有打印<code>sweets</code></li>
<li>返回<code>pie</code>函数对象</li>
</ul>
<p>您将返回的函数对象保存为名称<code>chocolate</code>,因此它现在引用<code>pie</code>函数对象。你知道吗</p>
<p>因此,当您执行<code>chocolate()</code>时,它实际上现在运行<code>pie()</code>,并执行以下操作:</p>
<ul>
<li>打印<code>sweets</code></li>
<li>返回字符串<code>cake</code></li>
</ul>
<hr/>
<p>当您执行<code>cake()()</code>时,它也会执行相同的操作,而不使用中间变量<code>chocolate</code>。因此<code>cake()()</code>从<code>cake()</code>运行返回的函数对象,即<code>pie</code>和打印。你知道吗</p>