Reputation: 363
Is there a pythonic way to reset an iterator? Here's what I thought doing but I am not sure how I would be able to reset the iterator when getting a value...
@property
def node_wave(self):
try:
wave = next(self._node_wave)
except StopIteration:
self._node_wave = iter(sorted(WAVELENGTH, key=lambda k: random.random())) #call setter here to reset the iterator
wave = next(self._node_wave)
return wave
@node_wave.setter
def node_wave(self):
self.node_wave = iter(sorted(WAVELENGTH, key=lambda k: random.random()))
Upvotes: 0
Views: 77
Reputation: 531708
Rather than explicitly resetting self._node_wave
, just define a private generator that takes care of cycling over the values.
def _wave_generator(self):
while True:
yield from sorted(WAVELENGTH, key=lambda k: random.random())
def __init__(self):
self._node_wave = _wave_generator()
@property
def node_wave(self):
return next(self._node_wave)
Because of how _wave_generator
is defined, next(self._node_wave)
will never raise StopIteration
. When one sorted list is exhausted, another one is automatically created.
Upvotes: 4