为什么列表推导会写入循环变量,而生成器不会?
如果我使用列表推导来做某事,它会写入一个局部变量:
i = 0
test = any([i == 2 for i in xrange(10)])
print i
这会打印出"9"。然而,如果我使用生成器,它不会写入局部变量:
i = 0
test = any(i == 2 for i in xrange(10))
print i
这会打印出"0"。
这个差异有什么合理的原因吗?这是一个设计决策,还是生成器和列表推导实现方式的随机副产品?就我个人而言,如果列表推导不写入局部变量似乎更好。