擅长:python、mysql、java
<p>您正在编写一个内部有嵌套函数的函数。通常的意图是,你会有一些其他的代码在那里比你正在做的更有趣,但我意识到这只是一个玩具,让你尝试这个想法,所以我们可以忽略这一点</p>
<p>你真正的问题是回报。您的代码是:</p>
<pre class="lang-py prettyprint-override"><code>def speak():
def whisper():
print('ased')
return whisper()
speak()
</code></pre>
<p>return语句实际调用了<code>whisper()</code>函数,然后返回该函数调用的结果,因为<code>whisper()</code>不返回它刚刚打印的任何内容,所以返回结果是空的</p>
<p>因此,它基本上与您所写的内容相同:</p>
<pre class="lang-py prettyprint-override"><code>def speak():
return print('ased')
speak()
</code></pre>
<p>或者只是:</p>
<pre class="lang-py prettyprint-override"><code>def speak():
print('ased')
speak()
</code></pre>
<p>您可能打算省去<code>()</code>这样的<code>return whisper</code>,这样它就不会调用该函数,而是实际返回了对该函数的引用,该函数将被返回,并且以后可以被调用,如下所示:</p>
<pre class="lang-py prettyprint-override"><code>def speak():
def whisper():
print('ased')
return whisper
func = speak()
...
func()
</code></pre>
<p>它在调用speak时不会打印任何内容,但会返回一个函数引用,您可以保存该引用,然后稍后调用(在本例中为^{<cd5>)</p>
<p>上面不是装饰器的工作方式,但它确实使用了定义内部函数然后返回对该函数的引用的相同原理</p>