<p>在<code>lambda</code>作用域中未定义的变量从调用作用域的调用点解析。</p>
<p>一个稍微简单的例子。。。</p>
<pre><code>>>> y = 1
>>> f = lambda x: x + y
>>> f(1)
2
>>> y = 2
>>> f(1)
3
</code></pre>
<p>……因此,在调用<code>lambda</code>之前,只需在调用作用域中设置<code>var</code>,尽管在<code>y</code>是“常量”的情况下,这更常用。</p>
<p>对该函数的反汇编显示。。。</p>
<pre><code>>>> import dis
>>> dis.dis(f)
1 0 LOAD_FAST 0 (x)
3 LOAD_GLOBAL 0 (y)
6 BINARY_ADD
7 RETURN_VALUE
</code></pre>
<hr/>
<p>如果要在定义<code>lambda</code>(即创建<a href="http://en.wikipedia.org/wiki/Closure_%28computer_science%29" rel="noreferrer">closure</a>)时将<code>y</code>绑定到对象,通常会看到这样的习惯用法。。。</p>
<pre><code>>>> y = 1
>>> f = lambda x, y=y: x + y
>>> f(1)
2
>>> y = 2
>>> f(1)
2
</code></pre>
<p>……因此,在定义<code>lambda</code>之后对<code>y</code>的更改没有影响。</p>
<p>对该函数的反汇编显示。。。</p>
<pre><code>>>> import dis
>>> dis.dis(f)
1 0 LOAD_FAST 0 (x)
3 LOAD_FAST 1 (y)
6 BINARY_ADD
7 RETURN_VALUE
</code></pre>