¿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)
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 buclefor
intenta cambiar el valor dez
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 dez
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: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:Esto dará como resultado: