亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 918 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號