Python3中map的非惰性评估版本?

2024-01-31

我正在尝试使用map在Python3.这是我正在使用的一些代码:

import csv

data = [
    [1],
    [2],
    [3]
]

with open("output.csv", "w") as f:
    writer = csv.writer(f)
    map(writer.writerow, data)

然而,自从map在Python3中返回一个迭代器,此代码在Python3中不起作用(但在Python2中工作正常,因为该版本map总是返回一个list)

我当前的解决方案是添加一个list对迭代器的函数调用以强制计算。但这看起来很奇怪(我不关心返回值,为什么要把迭代器转换成列表?)

还有更好的解决方案吗?


Using map即使在 Python2.x 中,当您对返回值不感兴趣时​​,它的副作用(例如函数调用)也是不可取的。如果函数返回None,但重复一百万次 - 你会建立一个一百万次的列表None只是丢弃它。正确的方法是使用 for 循环并调用:

for row in data:
    writer.writerow(row)

或作为csv模块允许,使用:

writer.writerows(data)

如果由于某种原因你真的真的想要 to use map,那么您可以使用consume来自 itertools 的配方并生成零长度双端队列,例如:

from collections import deque
deque(map(writer.writerow, data), maxlen=0)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python3中map的非惰性评估版本? 的相关文章

随机推荐