调用 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。当一个排序列表用完时,会自动创建另一个。