<p>首先,您应该理解Python中的所有东西都是一个对象。功能确实无处不在。在</p>
<p>从您的函数<code>f1()</code>,您实际上返回了对<code>lambda</code>函数的引用。你可以在任何变量中赋值。在</p>
<p>例如:</p>
<pre><code>>>> f = lambda x: x # Assign reference to lambda function to f.
# Now you can call lambda function using `f`
>>> f(1)
1
</code></pre>
<hr/>
<p>现在,让我们继续你的例子。您的第一个语句在<code>if</code>内是:</p>
^{pr2}$
<p>此作业相当于:</p>
<pre><code>f = lambda x: x + 100 # Replace `n` with `100` in return statment in `f1`.
</code></pre>
<p>所以,接下来的两个电话非常接近:</p>
<pre><code>print f(1) # returns `1 + 100` = 101 (Replace `x` with `1`.
print f(3) # returns `3 + 100` = 103
</code></pre>
<p>现在你得到<code>x</code>和{<cd5>}之间的关系x'被<code>f</code>的参数替换,而'n'则被<code>f1</code>的参数替换。在</p>
<blockquote>
<p>Please explain print f1(10)</p>
</blockquote>
<p><code>f1()</code>返回对lambda函数的引用。这就是它将要打印的内容。输出与您在下面的片段中得到的类似:</p>
<pre><code>>>> def func():
return 5
>>> func
<function func at 0x021F0F30>
</code></pre>
<p>除了将<code>func</code>替换为<code>lambda</code>,因为f1只返回lambda函数。在</p>
<blockquote>
<p>I thought f(5) will 15 ( 10 + 5)</p>
</blockquote>
<p>如果在前面的语句中将<code>f1</code>的返回值重新分配给<code>f</code>,那么您就可以得到这个输出。但是,由于您刚刚打印了<code>f(10)</code>的值,<code>f</code>仍然绑定到-<code>lambda x: x + 100</code>。所以你得到<code>105</code>。在</p>
<p>然后打印<code>f1</code>类型,它只是一个函数:</p>
<pre><code>print type(f1)
</code></pre>