首页 > 解决方案 > using map with None type functions

问题描述

exists in python an equivalent to Haskell's mapM_ function?

example ("print()" is here only a placeholder for every function with Signature: a -> None):

#pseudo code!!!
map (lambda x: print(x), [1,2,3])

like in Haskell:

mapM_ :: (Foldable t, Monad m) => (a -> m b) -> t a -> m ()
> mapM_ print [1,2]
> 1
> 2

标签: pythonpython-3.x

解决方案


map只是创建一个惰性迭代器。您必须使用这样的迭代器(例如通过调用list它)才能收获副作用。由于这会浪费内存(与其他集合构造函数一样),因此推荐的消费配方使用零大小collections.deque

from collections import deque

def consume(iterator):
    deque(iterator, maxlen=0)

现在,您可以使用内存占用小的迭代器:

lazy = map(print, [1,2,3])  # using lambda here defeats the purpose of functions
consume(lazy)

但是 TMK 与简单循环相比几乎没有优势:

for x in [1, 2, 3]:
    print(x)

推荐阅读