【发布时间】:2019-05-24 12:13:43
【问题描述】:
如果一个函数被传递了一个未定义数量的任意长度 M 的迭代器 N,有没有办法获得一个生成器,该生成器产生 M 个大小为 N 的元组,其中包含传递的迭代器的元素?
def dispatch(*iterables):
args = ( some kind of generator that involves *iterables)
for _ in args:
yield _
换句话说,如果我们将 *iterables 视为 NxM 矩阵,其中每一列(函数参数)都是可迭代的,是否有办法使用生成器来生成矩阵的行?
例如:
a = [9,8,7,6]
b = 'ciao'
c = iter(range(0,4))
>>> res = dispatch(a,b,c)
>>> res.__next__()
(9,c,0)
>>> res.__next__()
(8,i,1)
etc...
此外,由于这个函数也可以只接受 1 个可迭代作为参数,生成器应该能够处理这种情况并输出 类似于:
a = [9,8,7,6]
>>> res = dispatch(a)
>>> res.__next__()
(9,)
>>> res.__next__()
(8,)
我尝试使用 zip,但它不能处理上述边缘情况,而且它有点慢,这表明它可能必须在产生输出之前读取整个内容。
【问题讨论】:
标签: python python-3.x iterable-unpacking