为什么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
循环。
当我使用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
循环。