事实上,
map
在python 3语言中,列表理解的行为非常不同。请看下面的Python3程序:
def square(x):
return x*x
squares = map(square, [1, 2, 3])
print(list(squares))
print(list(squares))
您可能希望它打印行“[1,4,9]”两次,但它会打印“[1,4,9]”和“[]。你第一次看到
squares
它看起来是由三个元素组成的序列,但第二次是空的。
在python 2语言中
地图
返回一个普通的旧列表,就像两种语言中的列表理解一样。关键在于
地图
在python 3中(和
imap
在Python2)中不是列表-它是迭代器!
元素在迭代器上迭代时使用,这与在列表上迭代时不同。这就是为什么
正方形
最后一次看起来是空的
print(list(squares))
线。
总结一下:
-
在处理迭代器时,必须记住它们是有状态的,并且在遍历它们时会发生变化。
-
列表是更可预测的,因为它们只有在您显式地对它们进行变异时才会更改;它们是
容器
.
-
还有一个好处:数字、字符串和元组更容易预测,因为它们根本无法更改;它们是
价值观
.