擅长:python、mysql、java
<p>当定义了<code>button</code>时,lambda不存储<code>button</code>的<em>值</em>。描述lambda函数的代码将被解析和编译<strong>,但在实际调用lambda</strong>之前不会执行。
无论何时单击任何按钮,都会使用变量</em><code>button</code>的当前值。在循环的末尾,<code>button</code>包含{<cd4>},这将导致您看到的行为。在</p>
<p>试试这个:</p>
<pre><code>funcs = []
for button in ['phase', 'etalon', 'mirror', 'gain']:
funcs.append( lambda : print(button))
for fn in funcs:
fn()
</code></pre>
<p>输出为:</p>
^{pr2}$
<p>扩展示例,作为lambda不存储<code>button</code>值的证据请注意,如果<code>button</code>停止存在,则会出现一个错误:</p>
<pre><code>del button
for fn in funcs:
fn()
</code></pre>
<p>有输出</p>
<pre><code>funcs.append( lambda : print(button))
NameError: name 'button' is not defined
</code></pre>