Python | Expresiones generadoras

En Python , para crear iteradores, podemos usar tanto funciones regulares como generadores. Los generadores se escriben como una función normal, pero usamos yield() en lugar de return() para devolver un resultado. Es más potente como herramienta para implementar iteradores. Es fácil y más conveniente de implementar porque ofrece la evaluación de elementos bajo demanda. A diferencia de las funciones regulares que al encontrar una declaración de devolución finaliza por completo, los generadores usan una declaración de rendimiento en la que el estado de la función se guarda desde la última llamada y se puede recuperar o reanudar la próxima vez que llamemos a una función de generador. Otra gran ventaja del generador sobre una lista es que ocupa mucha menos memoria. 

Además de eso, dos funciones más _next_() y _iter_() hacen que la función del generador sea más compacta y confiable. Ejemplo : 

Python3

# Python code to illustrate generator, yield() and next().
def generator():
    t = 1
    print ('First result is ',t)
    yield t
 
    t += 1
    print ('Second result is ',t)
    yield t
 
    t += 1
    print('Third result is ',t)
    yield t
 
call = generator()
next(call)
next(call)
next(call)

Producción : 

First result is  1
Second result is  2
Third result is  3

Diferencia entre la función Generador y la función Normal – 

  • Una vez que la función cede, la función se detiene y el control se transfiere a la persona que llama.
  • Cuando la función finaliza, StopIteration se genera automáticamente en llamadas posteriores.
  • Las variables locales y sus estados se recuerdan entre llamadas sucesivas.
  • La función generadora contiene una o más sentencias de rendimiento en lugar de una sentencia de retorno.
  • Como los métodos como _next_() y _iter_() se implementan automáticamente, podemos iterar a través de los elementos usando next().

Hay varias otras expresiones que se pueden codificar de manera similar a las listas de comprensión, pero en lugar de corchetes usamos paréntesis. Estas expresiones están diseñadas para situaciones en las que una función envolvente utiliza el generador de inmediato. La expresión de generador permite crear un generador sin una palabra clave de rendimiento. Sin embargo, no comparte toda la potencia del generador creado con una función de rendimiento. Ejemplo :  

Python3

# Python code to illustrate generator expression
generator = (num ** 2 for num in range(10))
for num in generator:
    print(num)

Producción : 

0
1
4
9
16
25
36
49
64
81

También podemos generar una lista usando expresiones generadoras: 

Python3

string = 'geek'
li = list(string[i] for i in range(len(string)-1, -1, -1))
print(li)

Producción: 

['k', 'e', 'e', 'g']

Este artículo es una contribución de Chinmoy Lenka . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *