python map函数迭代

结果是一个嵌套列表,看起来像这样:


>>> 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函数会产生额外的迭代?


胡说叔叔
浏览 481回答 3
3回答

一只甜甜圈

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

慕容708150

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通常会使您的代码更难以阅读;并将其用于副作用更是如此。在这两种情况下,最好编写显式循环。

有只小跳蛙

[None, None, None, None]是对的调用的结果,该调用会map在Python解释器控制台中自动打印。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python