再利用;i、 例如,在类中的python数据生成器流中继续
我编写了下面的示例类,它具有一个生成器——在本例中是一个范围对象再利用;i、 例如,在类中的python数据生成器流中继续,python,object,stream,generator,Python,Object,Stream,Generator,我编写了下面的示例类,它具有一个生成器——在本例中是一个范围对象 class tmp(): def _setgen(self): self.gen = range(1,5) def __init__(self): self._setgen() # I define my generator only once; here in the __init__() def getval(self): for g in sel
class tmp():
def _setgen(self):
self.gen = range(1,5)
def __init__(self):
self._setgen() # I define my generator only once; here in the __init__()
def getval(self):
for g in self.gen: # use the afore defined `gen`
print(g)
if g > 2:
break
t = tmp() # init the object; including the range within the object
t.getval() # As expected numbers 1,2,3
t.getval() # Expect Number 4; but get again 1,2,3
为什么要重置范围对象?我想继续,我在休息时停了下来。
因此,对t.getval()
的第二次调用应该打印一个4,而不是从一开始就对新的(?)范围对象进行操作
为了达到我的“期望行为”,什么是一种变通方法
我会成功的gen
应该是范围
上的迭代器,如果您想将其保持为状态
每次调用时,getval
中的for
循环将范围
包装在一个新的iter
中。“它具有一个生成器——在本例中是一个范围对象。”range
对象不是生成器。它们甚至不是迭代器(要亲自查看,请尝试next(range(10))
。它们是可重用的,因此每次对它们进行迭代时,它都使用一个新的独立迭代器
self.gen = iter(range(1, 5))