List comprehensions在Python2中泄漏了它们的循环变量:如何使它与Python3兼容

时间:2016-06-17 17:37:42

标签: python python-2.7 python-3.x list-comprehension compatibility

我刚刚从Why do list comprehensions write to the loop variable, but generators don't?了解到,列表理解也是"泄漏"他们的循环变量进入周围范围

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

此错误已在Python3中修复。

a=`cat BIG_DATAfinal.txt | grep "STATUS" | awk '{print $5}'`
b=`cat BIG_DATAfinal.txt | grep "start" | awk '{print $3}' | sed 's/time;//g'`
echo "$a;$b"

此时使Python2与Python3兼容的最佳方法是什么?

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

@ mgilson的评论可能是事实,但是如果你想编写兼容python2和python3的代码,你可以将生成器函数包装在list函数中,例如:

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