在下面的示例中,类的下一个方法应该返回来自两个生成器的值:
class Test():
def __next__(self):
g1, g2 = self._gen1(), self._gen2()
return next(g1), next(g2)
def _gen1(self):
i = 0
while True:
yield i
i += 2
def _gen2(self):
i = 1
while True:
yield i
i += 2
但是,当我为这个类调用next
时,值不会递增。你知道吗
>>> t = Test()
>>> next(t)
>>> (0, 1)
>>> next(t)
>>> (0, 1)
怎么了?有没有更雄辩的方法来写这节课?你知道吗
您的代码不起作用,因为它在每次调用
__next__()
时都重新创建生成器函数,这将有效地将它们重置回初始状态,然后返回下一个next()
值:您可以通过添加
__init__()
方法并在其中初始化它们来修复此问题:一种更雄辩、更简洁的方法是使用内置的^{} function 来创建一个“生成器迭代器”,每次调用它时,它都会从每个生成器返回一对下一个值,从而避免出现问题。另一个优点是,只需更改
__init__()
方法,就可以很容易地扩展到处理更多的生成器。你知道吗我的意思是:
输出:
虽然我不知道你想完成什么,但这里有一个清理过的版本(我认为)可以满足你的需要。你知道吗
相关问题 更多 >
编程相关推荐