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.

¿Cómo cambiar un parámetro en un generador utilizando un método de envío?

Quiero cambiar un parámetro en mi generador, pero no sé cómo hacerlo correctamente. Creo que mi generador no está funcionando porque funciona dentro de un ciclo while, quiero que traiga
0,1,2,3,4,0,1,2,3,4,5,6,7,8,9

def gen(k=None):
    z = 0
    exc = 0
    while True:
        yield z
        z += 1
        if z > 10:
            break
        if k is not None:
            z = k
            exc += 1
        if exc > 1:
            break

gen1 = gen()
for i in gen1:
    print(i)
    if i == 5:
        gen1.send(0)
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para cambiar un parámetro en el generador, se puede usar el método .send(value). En el código dado, gen1.send(0) al final del bucle for intenta cambiar el valor de z a 0, que es el valor que se envía al generador. Sin embargo, esto no funcionará como se espera porque está tratando de cambiar el valor de z después de que ya se ha devuelto.

    Para lograr la salida deseada de 0,1,2,3,4,0,1,2,3,4,5,6,7,8,9, se puede modificar la función del generador de la siguiente manera:

    def gen(k=None):
        z = 0
        while True:
            yield z
            z += 1
            if z > 4 and k is not None: # comprobar si k está dado y z es mayor que 4
                z = k # reiniciar z a k
            elif z > 9: # romper cuando z sea mayor que 9
                break
    

    Luego, para usar el generador con un parámetro de 0, se puede crear una nueva instancia del generador con gen1 = gen(k=0) e iterar sobre él:

    gen1 = gen(k=0)
    for i in gen1:
        print(i)
    

    Esto dará como resultado:

    0
    1
    2
    3
    4
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    

Comments are closed.