for循环与map的区别

从标题来看,是有区别的。现在应用于我的场景:让我们考虑一个类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)

到底在做什么


UYOU
浏览 878回答 3
3回答

扬帆大鱼

一个非常有趣的问题,它有一个有趣的答案。该map函数返回一个可迭代的Map对象。map正在懒惰地执行其计算,因此除非您迭代该对象,否则不会调用该函数。因此,如果您这样做:x = map(D.attach_item, items)for i in x:    continue预期的结果将显示出来。

皈依舞

map只创建一个迭代器。您应该遍历它以将项目添加到中D.attached。像这样:D = Dummy()items = [1, 2, 3, 4]list(map(D.attach_item, items))是的,不要在您的代码中这样做:)但是该示例仅对理解有用。

米脂

引用文档返回一个迭代器,该迭代器将函数应用于所有可迭代项,并产生结果。这意味着您必须收集迭代器,例如list(map(D.attach_item, items))> [None, None, None, None]嗯,很奇怪。为什么没有,没有,...是的,您可以在map语句中转换任何循环,但这并不总是有用的。Map接受一个参数并对其执行某些操作(在大多数情况下),然后返回该参数,而没有副作用!这是一个例子:def add(a):    return a + 3list(map(add, items))> [4, 5, 6, 7]当您将其与其他功能(例如, filterdef add(a):    return a + 3def odd(a):    return a % 2 == 1list(map(add, filter(odd, items)))> [4, 6]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python