第一个带有0个或多个参数,每个参数都是可迭代的,第二个带有一个参数,该参数有望产生可迭代的:
from itertools import chainchain(list1, list2, list3)iterables = [list1, list2, list3]chain.from_iterable(iterables)
但
iterables可以是产生可迭代对象的任何迭代器:
def gen_iterables(): for i in range(10): yield range(i)itertools.chain.from_iterable(gen_iterables())
使用第二种形式通常是方便的情况,但是由于它懒惰地遍历输入可迭代对象,因此这也是链接 无限 数量的有限迭代器的唯一方法:
def gen_iterables(): while True: for i in range(5, 10): yield range(i)chain.from_iterable(gen_iterables())
上面的示例将为您提供一个可迭代的迭代器,该迭代器将产生一个循环的数字模式,该模式将永远不会停止,但永远不会消耗比单个
range()调用所需的内存更多的内存。



