两个同步生成器函数,Python

时间:2013-08-31 19:23:17

标签: python python-2.7 generator

我有两个功能:

def a():
    while True:
        yield stuff

def b():
    while True:
        yield otherstuff

我希望有一个循环,它从a()中存储的每个函数收集一个yield,b();例如。如果我嵌套调用它们的for循环,它会在第一个循环循环时重新启动第二个生成器。我能帮忙吗?

谢谢!

3 个答案:

答案 0 :(得分:6)

您可以使用itertools.izip(...)将值压缩在一起。

>>> def a():
        for i in xrange(10):
            yield i


>>> def b():
        for i in xrange(10, 20):
            yield i


>>> from itertools import izip
>>> for i, j in izip(a(), b()):
        print i, j


0 10
1 11
2 12
3 13
4 14
5 15
6 16
7 17
8 18
9 19

答案 1 :(得分:3)

for x, y in zip(a(), b()):

就像同时循环任何两个序列一样。 (您可能希望使用itertools.izipfrom future_builtins import zip来避免在迭代之前将所有项目收集到一个大列表中。)

答案 2 :(得分:1)

您可以使用izip

中的itertools
from itertools import izip
z = izip(a(),b())

现在你有了元组的生成器,a()中的第一项和b()

中的第二项