在Python2中列出循环变量:如何使其与Python3兼容

在Python2中列出循环变量:如何使其与Python3兼容,python,python-2.7,python-3.x,list-comprehension,compatibility,Python,Python 2.7,Python 3.x,List Comprehension,Compatibility,我刚刚从中了解到,列表理解也会将其循环变量“泄漏”到周围的范围中 Python 2.7.6 (default, Jun 22 2015, 17:58:13) >>> x = 'before' >>> a = [x for x in (1, 2, 3)] >>> x 3 这个错误在Python3中已修复 Python 3.4.3 (default, Oct 14 2015, 20:28:29) >>> x = 'befo

我刚刚从中了解到,列表理解也会将其循环变量“泄漏”到周围的范围中

Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
>>> x = 'before'
>>> a = [x for x in (1, 2, 3)]
>>> x
3
这个错误在Python3中已修复

Python 3.4.3 (default, Oct 14 2015, 20:28:29) 
>>> x = 'before'
>>> a = [x for x in (1, 2, 3)]
>>> x
'before'

在这一点上,使Python2与Python3兼容的最佳方法是什么?

最好的方法通常是不要像那样重用变量名,但是如果您想要在2和3中都获得Python3行为的东西:

list(x for x in (1, 2, 3))

@mgilson的评论可能是正确的,但如果您想编写同时适用于python2和python3的代码,可以将生成器函数包装在列表函数中,例如:

Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
>>> x = 'before'
>>> a = list(x for x in (1, 2, 3))
>>> x
'before'

不要依赖“泄漏”这个名字。。。为列表comp变量使用唯一的名称。将生成器表达式与列表一起使用这不是唯一的名称same@PadraicCunningham:您能详细说明一下吗?当我在Python 2.7.11中运行您的代码时,
a
变成了
[]
,而不是所需的列表。啊,我明白了,它是一个生成器。修复访问列表的第一个/唯一元素