擅长:python、mysql、java
<p>我知道这是一篇旧文章,但是我没有看到列出的一个因素是,在Python(pre-nonlocal)中,不能修改引用环境中包含的局部变量。(在您的示例中,这样的修改并不重要,但从技术上讲,无法修改这样的变量意味着它不是一个真正的闭包。)</p>
<p>例如,以下代码不起作用:</p>
<pre><code>def counter():
i = 0
def f():
i += 1
return i
return f
c = counter()
c()
</code></pre>
<p>上面对<strong>c</strong>的调用将引发UnboundLocalError异常。在</p>
<p>通过使用可变表(如字典)可以轻松解决这一问题:</p>
^{pr2}$
<p>当然,这只是一个变通办法。在</p>