调用 setter 重置迭代器
Calling setter to reset iterator
是否有 pythonic 方法来重置迭代器?这是我想做的,但我不确定在获取值时如何重置迭代器...
@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()))
与其显式重置 self._node_wave
,不如定义一个负责循环处理值的专用生成器。
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)
由于 _wave_generator
的定义方式,next(self._node_wave)
永远不会引发 StopIteration
。当一个排序列表用完时,会自动创建另一个。
是否有 pythonic 方法来重置迭代器?这是我想做的,但我不确定在获取值时如何重置迭代器...
@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()))
与其显式重置 self._node_wave
,不如定义一个负责循环处理值的专用生成器。
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)
由于 _wave_generator
的定义方式,next(self._node_wave)
永远不会引发 StopIteration
。当一个排序列表用完时,会自动创建另一个。