擅长:python、mysql、java
<p>Python中的<code>def</code>只是将名称绑定到函数/闭包的常规语句。例如你可以写</p>
<pre><code>flist = []
for i in range(30):
def func(x, i=i):
print(x * i)
flist.append(func)
</code></pre>
<p>之后<code>flist[7](6)</code>将返回42。你知道吗</p>
<p>棘手的部分只是上述声明中的<code>i=i</code>。这是必需的,因为闭包是变量的,而不是当前的变量值。如果没有<code>i=i</code>,所有函数都将使用用于循环的相同变量<code>i</code>。你知道吗</p>
<p>Python还支持匿名函数,因此在上面的简单示例中,代码可以缩短为</p>
<pre><code>flist = []
for i in range(30):
flist.append(lambda x, i=i: print(x * i))
</code></pre>
<p>但是<code>lambda</code>非常有限(只有一个表达式,没有语句)</p>