<p>括号与<code>return</code>无关;它们是用来调用函数的,就像你调用函数一样。你知道吗</p>
<p>让我们将其分解为一种更具可读性的形式:</p>
<pre><code>function_table = {
'add': lambda: x + y,
'sub': lambda: x - y,
'mul': lambda: x * y,
'div': lambda: x / y,
}
</code></pre>
<p>到目前为止,还不错:这只是一个将字符串映射到函数的字典,因此您可以按名称查找函数。你知道吗</p>
<pre><code>default_function = lambda: None
</code></pre>
<p>这只是一个可以调用并返回<code>None</code>的函数。你知道吗</p>
<pre><code>function = function_table.get(operator, default_function)
</code></pre>
<p>这只是在dict中查找一个值。<code>d.get(key, default)</code>如果该键有值,则给出<code>d[key]</code>;如果没有值,则给出<code>default</code></p>
<p>所以,现在<code>function</code>就是<code>add</code>函数<code>lambda: x+y</code>,或者默认的<code>lambda: None</code>,或者其他三个函数中的任何一个,但是不管是哪一个,它都是一个不带参数的函数。所以我们可以称之为。这就是括号的含义:</p>
<pre><code>value = function()
</code></pre>
<p>现在我们只返回这个值:</p>
<pre><code>return value
</code></pre>
<p>如果不使用括号,就不会调用函数并返回它给您的值,而只会返回它。因此,您不必返回<code>5</code>或<code>None</code>,而是返回一个函数对象。如果你试着把它打印出来,也许它会说<code><function '<lambda>' at 0x12345788></code>,但它说什么其实并不重要;它告诉你的是,你要打印的东西是某个函数,它没有名字,因为你用<code>lambda</code>而不是<code>def</code>来定义它。你知道吗</p>