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

for循环与map的区别

for循环与map的区别

UYOU 2021-05-07 18:46:15
从标题来看,是有区别的。现在应用于我的场景:让我们考虑一个类Dummy:class Dummy:    def __init__(self):        self.attached = []    def attach_item(self, item):        self.attached.append(item)如果我使用这个:D = Dummy()items = [1, 2, 3, 4]for item in items:    D.attach_item(item)我确实得到了D.attached = [1, 2, 3, 4]。但是,如果我将函数映射attach_item到items,则D.attached保持为空。map(D.attach_item, items)到底在做什么
查看完整描述

3 回答

?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

一个非常有趣的问题,它有一个有趣的答案。


该map函数返回一个可迭代的Map对象。map正在懒惰地执行其计算,因此除非您迭代该对象,否则不会调用该函数。


因此,如果您这样做:


x = map(D.attach_item, items)

for i in x:

    continue

预期的结果将显示出来。


查看完整回答
反对 回复 2021-05-18
?
皈依舞

TA贡献1851条经验 获得超3个赞

map只创建一个迭代器。您应该遍历它以将项目添加到中D.attached。像这样:


D = Dummy()

items = [1, 2, 3, 4]

list(map(D.attach_item, items))

是的,不要在您的代码中这样做:)但是该示例仅对理解有用。


查看完整回答
反对 回复 2021-05-18
?
米脂

TA贡献1836条经验 获得超3个赞

引用文档


返回一个迭代器,该迭代器将函数应用于所有可迭代项,并产生结果。


这意味着您必须收集迭代器,例如


list(map(D.attach_item, items))


> [None, None, None, None]

嗯,很奇怪。为什么没有,没有,...


是的,您可以在map语句中转换任何循环,但这并不总是有用的。Map接受一个参数并对其执行某些操作(在大多数情况下),然后返回该参数,而没有副作用!这是一个例子:


def add(a):

    return a + 3

list(map(add, items))


> [4, 5, 6, 7]

当您将其与其他功能(例如, filter


def add(a):

    return a + 3

def odd(a):

    return a % 2 == 1

list(map(add, filter(odd, items)))


> [4, 6]


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

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信