ceder y mientras confusión bucle debido a resultado inesperado

Juan Garcia :

Hola chicos así que me preguntaba por qué al hacer la make_song () la función que efectivamente trabajadas, me pareció que la versión que voy a mostrar a continuación no funcionaría como lo hizo:

def make_song(count = 99, beverage = "soda"):
    while count > 0:
            if count > 1:
                yield "{} bottles of {} on the wall.".format(count, beverage)
                count -=1
            elif count == 1:
                yield "Only {} bottle of {} left!".format(count, beverage)
                count -= 1
                yield "No more {}!".format(beverage)

hey = make_song(5, "coke")
print(next(hey))
print(next(hey))
print(next(hey))
print(next(hey))
print(next(hey))
print(next(hey))

mi conclusión fue que cuando cuente == 1 se imprimiría:

Sólo 1 botella de coca cola a la izquierda!

No más de coque!

porque ambos estaban bajo el mismo si la declaración. Para mi sorpresa, funcionó de la manera que yo quería que el trabajo, imprimiendo sólo "Sólo 1 botella de coca cola izquierda!" cuando el recuento == 1, y luego, cuando yo solía siguiente () de nuevo, sería imprimir "No más coca-cola!", yo no esperaba que éste funcione,

¿por qué no imprime tanto los rendimientos cuando el recuento == 1 a pesar de que estaban bajo la misma sentencia if?

norok2:

La parte del código que determina cuando el generador da que algo es yieldy no if. La ifúnica determina qué líneas se ha de ejecutar en función de una condición.

En la práctica un generador es una generalización de una función. Una función devuelve un valor una vez, mientras que un generador de rentabilidad, ya que en muchas ocasiones como una yielddeclaración de que se alcance. Después de cada yieldse suspende la ejecución, y sobre la siguiente llamada a next()la ejecución se reanuda y continúa hasta la siguiente yieldse encuentra.

Una alternativa a la next()llamada es utilizar el iterador directamente en un forbucle, que agotar todos los posibles yieldpuntos finales.

Por ejemplo:

for s in make_song(5, "coke"):
    print(s)

Te regalaré:

5 bottles of coke on the wall.
4 bottles of coke on the wall.
3 bottles of coke on the wall.
2 bottles of coke on the wall.
Only 1 bottle of coke left!
No more coke!

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=391601&siteId=1
Recomendado
Clasificación