2017-08-14 94 views
1

我感興趣的是使用python進行函數式編程,並且正在通過Mary Rose Cook的博客帖子A practical introduction to functional programming在python 3中解決映射函數問題vs python 2

顯然,它是用Python編寫的2就象這樣:

name_lengths = map(len, ["Mary", "Isla", "Sam"]) 

print name_lengths 
# => [4, 4, 3] 
在Python 3

產生這樣的:

<map object at 0x100b87a20> 

我有兩個問題:

  1. 爲什麼這是所以?
  2. 除了converting the map object to a list and then use numpy之外,還有其他解決方案嗎?

回答

2

作爲記載,在migration guide

在Python 2地圖(),而在Python 3它返回一個迭代返回一個列表。

Python 2

應用功能的可迭代的每一個項目,並返回結果的列表

Python 3

返回適用功能,可迭代的每一個項目,產生結果的迭代器。

Python 2總是等效於list(imap(...)),Python 3允許延遲評估。

1

爲了補充@ dhke的優秀答案(對於評論來說這太長了)以這種方式思考它。你想通過合併mapfilter等,所以有兩種方式來思考這個執行列表上的多個轉變:

  1. 應用的第一次轉型的整個列表,然後是第二等
  2. 應用所有轉換到列表中的第一個元素,那麼第二等

的python3方式允許用戶選擇,而第二個不能被作爲簡潔的蟒蛇2寫:你必須明確地迭代帶有for循環的列表,並建立一個新的結果列表。