最近我正在尝试打印map()
结果的方法,在那里我遇到了*
我试过这个:
>>> def inc(x):
... return x+1
...
>>> a = map(inc,[1,2,3,4,5])
>>> print(*a)
2 3 4 5 6
>>> print(*a)
这里,通过函数inc()
,我将映射对象结果存储在a
中。在使用CCD_ 5打印时,我得到了想要的输出。第二次运行命令不会打印出任何结果。为什么?
我想知道a
发生了什么,并尝试检查a
:的type()
>>> type(a)
<class 'map'>
但似乎一切都很好。那么,为什么我不能再次使用print(*a)
命令打印结果呢?即使当我尝试使用[i for i in a]
打印时,第一次可能,第二次不可能,它也会让我使用[]
。问题出在哪里?
map
对象可以被认为是某个数据序列上的迭代器。简而言之,每次应用next
时,map
对象都会应用您指定的函数。它不存储结果。
因此,使用*
,您可以有效地将next
应用于a
,直到StopIteration
,这意味着您可以有效地在数据中应用inc
函数。
之后,您应该重新初始化map
。或者,您可以使用tee
。
https://docs.python.org/3/library/itertools.html#itertools.tee
如果您想将map
的结果存储在容器中,那么您可以根据map
的结果初始化list
,例如
l = list(map(inc, [1, 2, 3, 4]))
这相当于调用*a
,但结果会传递给list
构造函数,然后分配给变量l
。