我写了一个下面的小python程序
def abc(x):
print(x)
然后打电话 map(abc,[1,2,3])
但上面的地图功能刚刚显示
<map object at 0x0000000001F0BC88>
而不是打印x值。
我知道map是python 3中的迭代器,但它仍然应该打印'x'值正确。这是否意味着当我们使用“map”时不调用abc(x)方法?
答案 0 :(得分:3)
map迭代器懒惰地计算值,因此在迭代它们之前你不会看到输出。以下是您可以打印出值的明确方法:
def abc(x):
print(x)
it = map(abc, [1,2,3])
next(it)
next(it)
next(it)
next
函数调用it.__next__
以跳到下一个值。当您使用for i in it: # do something
或从迭代器list(it)
构造列表时,这是在引擎盖下使用的内容,因此执行这些操作中的任何一个也会打印出值。
那么,为什么懒惰呢?在处理非常大或无限的序列时它会派上用场。想象一下,如果不是将[1,2,3]
传递给地图,而是将itertools.count()
传递给它。懒惰允许您仍然迭代生成的映射,而不尝试预先生成所有(并且有无限多个)值。
答案 1 :(得分:1)
<强>懒惰评价强>
Python3中的 map
(或range
等)是懒惰评估:它会在您需要时进行评估。
如果您想要地图结果,可以使用:
list(map(abc, [1,2,3]))