擅长:python、mysql、java
<p>旧的行为是一个错误,但不容易修复,因为有些代码依赖它。在</p>
<p>列表理解中的变量<code>i</code>应该与顶层的变量<code>i</code>不同。从逻辑上讲,它应该有自己的范围,而不是延伸到理解之外,因为它的价值只在理解中有意义。但是在Python2.x中,由于实现细节的原因,范围超出了需要的范围,导致变量“泄漏”到外部范围,导致您看到的令人困惑的结果。在</p>
<p>python3.0故意不想与以前的版本向后兼容,所以他们利用这个机会来修复这种不受欢迎的行为。在</p>
<blockquote>
<p>In Python 2.3 and later releases, a list comprehension “leaks” the control variables of each for it contains into the containing scope. However, this behavior is deprecated, and relying on it will not work in Python 3.0</p>
</blockquote>
<p><a href="http://docs.python.org/reference/expressions.html#id20" rel="noreferrer">Source</a></p>