结果是一个嵌套列表,看起来像这样:>>> results[[1, 2, 3, 'a', 'b'], [1, 2, 3, 'c', 'd'], [4, 5, 6, 'a', 'b'], [4, 5, 6, 'c', 'd']]pr是一个函数,其定义如下:>>> def pr(line):... print line结果的普通迭代的行为确实是这样的:>>> for result in results:... pr(result)... [1, 2, 3, 'a', 'b'][1, 2, 3, 'c', 'd'][4, 5, 6, 'a', 'b'][4, 5, 6, 'c', 'd']但是使用map进行隐式迭代会导致以下行为:>>> map(pr, results)[1, 2, 3, 'a', 'b'][1, 2, 3, 'c', 'd'][4, 5, 6, 'a', 'b'][4, 5, 6, 'c', 'd'][None, None, None, None]我的问题:为什么map函数会产生额外的迭代?
3 回答

一只甜甜圈
TA贡献1836条经验 获得超5个赞
map
将函数应用于可迭代的每个元素,并将结果存储回列表(或Python 3中的map对象)。因此,该[None, None, None, None]
部分是map函数的返回值。您在执行脚本时不会看到此消息,但是您也可以通过在IDLE中将其分配一个值来摆脱它:
>>> _ = map(pr, results)
但是请注意,结果列表的构造(至少在Python 2中有效)会产生一些影响,因此,如果不需要结果,最好不要使用map
这种情况。

慕容708150
TA贡献1831条经验 获得超4个赞
map在Python 2中,返回一个列表,该列表由传递给它的函数的所有返回值组成。您的pr函数返回None(隐式地结束了)。因此,的结果map将是一个填充有Nones的列表,一个传入的可迭代对象中的每个对象一个。交互式解释器会自动打印该列表,因为您没有将其分配给变量-这是最后一行在看。
将其分配给变量时,可以更清楚地看到这一点:
>>> a = map(pr, results)
[1, 2, 3, 'a', 'b']
[1, 2, 3, 'c', 'd']
[4, 5, 6, 'a', 'b']
[4, 5, 6, 'c', 'd']
>>> a
[None, None, None, None]
请注意,map如果您不关心此结果,则使用wlil通常会使您的代码更难以阅读;并将其用于副作用更是如此。在这两种情况下,最好编写显式循环。
添加回答
举报
0/150
提交
取消