es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Llamando al setter para restablecer el iterador

¿Existe una forma “pythonic” de reiniciar un iterador? Esto es lo que pensé hacer, pero no estoy seguro de cómo sería capaz de reiniciar el iterador al obtener un valor…

@property
def node_wave(self):
    try:
        wave = next(self._node_wave)
    except StopIteration:
        self._node_wave = iter(sorted(WAVELENGTH, key=lambda k: random.random()))  # llamar al setter aquí para reiniciar el iterador
        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()))
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una manera pythonica de reiniciar un iterador. De hecho, el fragmento de código proporcionado en la pregunta ya demuestra una posible forma de hacerlo usando un método setter. Específicamente, cuando el método next() genera una excepción StopIteration en el método node_wave() del getter de la propiedad, se llama al método setter node_wave() para reiniciar el atributo _node_wave a un nuevo objeto iterador que se crea ordenando la secuencia WAVELENGTH usando una función de ordenación aleatoria. Por lo tanto, cada vez que se accede a la propiedad node_wave() después de la primera iteración, devolverá un nuevo valor de longitud de onda ordenado aleatoriamente sin necesidad de crear una nueva instancia de la clase.

Comments are closed.