使用以下定义:
def a(x):
return x + 1
def b(x):
return x + 2
[map(a, range(3)), map(b, range(3)]
产生[<iterator>, <iterator>]
。我正在尝试复制此功能,而不必两次构造range
迭代器。
我已完成此功能:
def map_many(mappers, values):
def get_many(value):
for mapper in mappers:
yield mapper(value)
mapped_values = map(get_many, values)
return zip(*mapped_values)
正在执行:
for my_iterator in map_many((a, b), range(3)):
print(my_iterator)
结果:
(1, 2, 3)
(2, 3, 4)
为什么会急切地评估my_iterator
?我本来希望它仍然是一个惰性计算的迭代器(在打印时,它会以<iterator>
的形式显示出来)。据我了解,在*
之前的mapped_values
本身将解压缩mapped_values
(它是迭代器的迭代器),而不是解压缩将不断调用next(mapped_values)
返回的所有迭代器。
是否有可能让每个my_iterator
保留为迭代器并进行惰性计算,而不是转换为tuple
?
使用以下定义:def a(x):返回x + 1 def b(x):返回x + 2 [map(a,range(3)),map(b,range(3)]结果为[
根据zip的文档,相当于: