Get started learning Python with DataCamp's free Intro to Python tutorial. Learn Data Science by completing interactive coding challenges and watching videos by expert instructors. Start Now!

This site is generously supported by DataCamp. DataCamp offers online interactive Python Tutorials for Data Science. Join 11 million other learners and get started learning Python for data science today!

Good news! You can save 25% off your Datacamp annual subscription with the code LEARNPYTHON23ALE25 - Click here to redeem your discount

Generadores


Generadores son muy fáciles de implementar, pero un poco difíciles de entender.

Los generadores se utilizan para crear iteradores, pero con un enfoque diferente. Los generadores son funciones simples que devuelven un conjunto iterable de elementos, uno a la vez, de una manera especial.

Cuando una iteración sobre un conjunto de elementos comienza utilizando la declaración for, el generador se ejecuta. Una vez que el código de la función del generador alcanza una declaración "yield", el generador cede su ejecución de vuelta al bucle for, devolviendo un nuevo valor del conjunto. La función generadora puede generar tantos valores (posiblemente infinitos) como desee, cediendo cada uno en su turno.

Aquí hay un ejemplo simple de una función generadora que devuelve 7 números enteros aleatorios:

Esta función decide cómo generar los números aleatorios por sí misma y ejecuta las declaraciones yield una a la vez, pausando entre ellas para ceder la ejecución al bucle for principal.

Ejercicio

Escribe una función generadora que devuelva la serie de Fibonacci. Se calculan utilizando la siguiente fórmula: Los primeros dos números de la serie siempre son iguales a 1, y cada número consecutivo devuelto es la suma de los dos últimos números. Pista: ¿Puedes usar solo dos variables en la función generadora? Recuerda que las asignaciones pueden hacerse simultáneamente. El código

a = 1
b = 2
a, b = b, a
print(a, b)

cambiará simultáneamente los valores de a y b.

# fill in this function def fib(): pass #this is a null statement which does nothing when executed, useful as a placeholder. # testing code import types if type(fib()) == types.GeneratorType: print("Good, The fib function is a generator.") counter = 0 for n in fib(): print(n) counter += 1 if counter == 10: break # fill in this function def fib(): a, b = 1, 1 while 1: yield a a, b = b, a + b # testing code import types if type(fib()) == types.GeneratorType: print("Good, The fib function is a generator.") counter = 0 for n in fib(): print(n) counter += 1 if counter == 10: break test_output_contains("Good, The fib function is a generator.") success_msg('Good work!')

This site is generously supported by DataCamp. DataCamp offers online interactive Python Tutorials for Data Science. Join over a million other learners and get started learning Python for data science today!

Previous Tutorial Next Tutorial Take the Test
Copyright © learnpython.org. Read our Terms of Use and Privacy Policy