为了账号安全,请及时绑定邮箱和手机立即绑定

python map函数迭代

python map函数迭代

胡说叔叔 2021-03-16 13:26:06
结果是一个嵌套列表,看起来像这样:>>> 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这种情况。


查看完整回答
反对 回复 2021-03-26
?
慕容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通常会使您的代码更难以阅读;并将其用于副作用更是如此。在这两种情况下,最好编写显式循环。


查看完整回答
反对 回复 2021-03-26
?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

[None, None, None, None]是对的调用的结果,该调用会map在Python解释器控制台中自动打印。


查看完整回答
反对 回复 2021-03-26
  • 3 回答
  • 0 关注
  • 480 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号