为什么Python 3 使用deque时没有调用map函数?

Why Python 3 map function is not called when deque is used?

当我使用deque作为输入时,map的参数函数没有被调用。

如果我只是循环它并调用旋转函数,它就起作用了。

为什么在map函数后res根本不旋转?

>>> print(res)
[deque([4, 5, 1, 2, 3]), deque([4, 5, 1, 2, 3]), deque([4, 5, 1, 2, 3]), deque([4, 5, 1, 2, 3]), deque([4, 5, 1, 2, 3])]
>>> map(lambda x: x.rotate(1), res)
<map object at 0x10a35b7f0>
>>> print(res)
[deque([4, 5, 1, 2, 3]), deque([4, 5, 1, 2, 3]), deque([4, 5, 1, 2, 3]), deque([4, 5, 1, 2, 3]), deque([4, 5, 1, 2, 3])]

但是,如果我使用 for 循环,它会被旋转。

>>> for x in res:
...     x.rotate(1)
...
>>> print(res)
[deque([3, 4, 5, 1, 2]), deque([3, 4, 5, 1, 2]), deque([3, 4, 5, 1, 2]), deque([3, 4, 5, 1, 2]), deque([3, 4, 5, 1, 2])]
>>>

map(类似于生成器表达式)是惰性的。在您强制执行之前,它不会迭代列表并评估其功能,并且您不会在此处强制迭代器 运行。

你可以通过把它放在一个列表中来强制它(或者从一开始就使用理解):

list(map(lambda x: x.rotate(1), res))

list强行计算返回的map.

理想情况下,您不应该使用 map 来产生副作用。 map 的目的是将一个列表转换为另一个列表。为了清楚起见,请在此处使用完整的 for 循环。