Py学习  »  raek  »  全部回复
回复总数  1
11 年前
回复了 raek 创建的主题 » 何时在python中使用map()[重复]

事实上, 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)) 线。

总结一下:

  • 在处理迭代器时,必须记住它们是有状态的,并且在遍历它们时会发生变化。
  • 列表是更可预测的,因为它们只有在您显式地对它们进行变异时才会更改;它们是 容器 .
  • 还有一个好处:数字、字符串和元组更容易预测,因为它们根本无法更改;它们是 价值观 .