为什么此打印更改以下结果?

时间:2017-12-22 05:02:38

标签: python

示例代码:

bitbake -c do_populate_sdk  custom-qt5-image

使用上面的代码,第一行生成的p = map(some_logic) print(list(p)) # HERE p = filter(some_logic, p) print(list(p)) 始终是相同的。但是通过添加注释 HERE 的行,最后一次打印将p作为输出。如果没有 HERE 行,则上一个[]会提供正确的print内容。

造成这种情况的原因是什么?

1 个答案:

答案 0 :(得分:3)

当您使用map调用的结果时,它将被消耗:

>>> p = map(int, ['1', '2'])
>>> p
<map object at 0x02C878B0>
>>> list(p)
[1, 2]
>>> list(p)
[]

您应该将更改map的结果存储到list

>>> p = list(map(int, ['1', '2']))
>>> p
[1, 2]
>>> p = list(filter(lambda x: x == 1, p))
>>> p
[1]

请注意filter同样的情况,因此我已将其更改为list