如何在Python中创建一个2-shot生成器?
我的尝试(不起作用):
我的尝试(不起作用):
>>> def g():
... try:
... yield 1
... raise StopIteration('Shot 1 exhausted')
... finally:
... yield 2
... # 'Shot 2 exhausted'
...
>>> x = g()
>>> list(x), list(x)
([1, 2], [])
# expected output ([1], [2])
next()
函数的调用中引发StopIteration
异常... - metatoasterTypeError: iter() returned non-iterator of type 'BrokenIterator'
的错误。不过,我想尝试使用yield
来解决问题。 - wimnext
方法将需要更改为__next__
。如果你想尝试使用yield
来完成它,可以试试,但你可能需要作弊。例如,创建一个对象,其__iter__
方法是修改对象状态的生成器 - 但是该对象不是迭代器,只是一个2-shot可迭代对象。 - user2357112