擅长:python、mysql、java
<p>如果您使用的是Python3.x,那么可以使用<a href="http://docs.python.org/3.3/reference/simple_stmts.html#the-nonlocal-statement" rel="nofollow">^{<cd1>}</a>:</p>
<pre><code>>>> def QQ():
... a = 0
... def QQQ():
... nonlocal a
... a += 1
... QQQ()
... return a
...
>>> QQ()
1
</code></pre>
<p>如果您使用的是Python2.x,那么就不能这么做。这就是添加<code>nonlocal</code>的原因。因此,您必须使用某种可变包装器,如1元素列表技巧。*</p>
<p><a href="http://www.python.org/dev/peps/pep-3104/" rel="nofollow">PEP 3104</a>解释了所有棘手的细节(包括为什么Python在默认情况下不执行“经典静态嵌套作用域”,并要求您对此进行明确说明)。你知道吗</p>
<hr/>
<p>*当然,也可以升级到3.x版本。每当您发现自己在问如何绑定到非局部变量、委托到另一个生成器、获取完全限定的类名、指定只包含关键字的参数、解包一个可变长度的迭代器但分别捕获最后一个值,或者其他任何在3.x中很琐碎但在2.x中却很痛苦的问题时,都值得再次问自己是否该升级了。你知道吗</p>