为什么map没有在python 3中执行函数

时间:2017-04-08 03:21:43

标签: python-3.x

我写了一个下面的小python程序

def abc(x):
    print(x)

然后打电话     map(abc,[1,2,3])

但上面的地图功能刚刚显示

<map object at 0x0000000001F0BC88>

而不是打印x值。

我知道map是python 3中的迭代器,但它仍然应该打印'x'值正确。这是否意味着当我们使用“map”时不调用abc(x)方法?

2 个答案:

答案 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]))