generador de python

Funciones y métodos de Python

Los iteradores juegan un papel importante en Python. Le permiten crear un objeto sobre el que se puede iterar. Es una buena forma de almacenar datos a los que se puede acceder a través de un bucle for in.

El problema con los iteradores es que se necesita mucho trabajo para construir uno. Son útiles, pero tienes que escribir mucho código para que uno funcione. Los generadores ayudan a resolver este problema.

En esta guía, vamos a hablar sobre qué son los generadores de Python y por qué debería usarlos. También implementaremos un generador en Python para ayudarlo a comprender cómo funcionan.

Sin más preámbulos, ¡comencemos!




¿Qué es un generador? < / h2>

Un generador es una forma sencilla de crear un iterador en Python. Es una función que devuelve un objeto sobre el que puede iterar.

Los generadores a menudo se denominan azúcar sintáctico. Esto se debe a que no necesariamente agregan nueva funcionalidad a Python. Ayudan a que su código sea más eficiente.

Al igual que los iteradores, solo puede iterar sobre un generador una vez. Esto se debe a que los generadores realizan un seguimiento de cuántas veces se han iterado y no se pueden restablecer.

Echemos un vistazo a un iterador de Python:

81% de los participantes afirmaron que se sentían más seguros de sus perspectivas laborales tecnológicas después de asistir a un campamento de entrenamiento. Asigne a un bootcamp hoy.

El graduado promedio de bootcamp pasó menos de seis meses en la transición de carrera, desde comenzar un bootcamp hasta encontrar su primer trabajo.

Este código crea un iterador llamado Galletas. Cuando pase datos a través de este iterador, se convertirá en un objeto iterable. Esto significa que puede recorrer los datos usando un bucle for in. Si está mirando este código y cree que es muy largo, es porque lo es.

Los generadores pueden ayudarnos a acortar este código. Escribamos un generador para nuestro iterador anterior:

 def cookies (valor): while True : valor de rendimiento 

Nuestro código se ha reducido drásticamente en tamaño. Analicemos cómo funciona esto.

Un generador es una función que tiene una palabra clave de rendimiento en lugar de una declaración de retorno. Las declaraciones de rendimiento devuelven un valor de una función.

La diferencia entre una declaración de rendimiento y una declaración de retorno es que una declaración de retorno detiene la ejecución de una función, mientras que una declaración de rendimiento detiene la función y continúa iterando.


Intentemos iterar sobre nuestra función generadora simple:

 para cookies en cookies (" Frambuesa "): imprimir (cookie) 

Nuestro código devuelve:

Frambuesa

Raspberry

& hellip;

Este código se repite hasta que detengamos nuestro programa. Esto se debe a que hemos usado un bucle while que ejecuta para siempre. Esto no es muy útil en la mayoría de los casos. Escribamos un generador que se detenga cuando se haya realizado una acción.




Cómo escribir un generador de Python

Tenemos un lista de cookies que queremos imprimir en la consola. Esta lista se ve así:

[& ldquo; Raspberry & rdquo ;, & ldquo; Choc-Chip & rdquo ;, & ldquo; Cinnamon & rdquo ;, & ldquo ; Avena & rdquo;]

Para imprimirlos en la consola, podríamos crear comió un generador simple. Abra un nuevo archivo Python y pegue el siguiente código:

 def print_cookies (cookies): length = len (cookies) para cookie en rango (0, length): rendimiento cookies [cookie] 

Nuestro generador revisa cada cookie en la lista que especificamos y devuelve cada cookie individualmente. Este generador aún no funciona. Tenemos que usar un bucle for para iterar sobre él:

 cookie_list = ["Raspberry", "Choc-Chip", "Cinnamon", "Oat"] para c en print_cookies (cookie_list): print (c) 

Hemos definido una matriz llamada cookie_list que almacena una lista de cuatro cookies. Luego hemos configurado un bucle for que usa nuestro generador para iterar a través de los valores en cookie_list .

Para cada iteración en nuestro bucle for, el objeto generado se imprime a la consola:

Frambuesa

"Career Karma entró en mi vida cuando más lo necesitaba y rápidamente me ayudó a combinar con un bootcamp. Dos meses después de graduarme, encontré mi trabajo de ensueño que se alinea con mis valores y metas en la vida! "

Venus, ingeniero de software en Rockbot

Choc-Chip

Canela

Avena

¡Lo logramos! Este generador devuelve valores hasta que se repite cada valor de la variable cookie_list .

Los generadores tienen una variedad de casos de uso. Digamos que tenemos una lista de precios de pedidos que queremos sumar. Podríamos hacer esto usando el siguiente código:

 def total_orders (orders): length = len ( pedidos) total = 0 para o en rango (0, longitud): total + = pedidos [o] rendimiento total 

Este generador mantendrá un total acumulado del valor de todos los pedidos en un lista. Después de que se haya repetido cada artículo, el generador arrojará el valor total actual de los pedidos. Vamos a escribir un bucle for que utilice nuestro generador:

 order_list = [2.30, 2.50, 1.95, 6.00, 7.50, 2.15] para pedidos en total_orders (order_list): print (order) 

Nuestro código devuelve:


2.3

4.8

6.75

12.75

20.25

22.4

Nuestro generador ha calculado el valor acumulativo de todos los pedidos en la variable order_list. Cada iteración sobre la lista devuelve el nuevo valor acumulativo.




Cómo Escribir una expresión de generador

Los generadores ya son más fáciles de escribir que un iterador. Nuestra búsqueda de escribir un código más limpio no necesita detenerse, gracias a las expresiones de generador.

Expresiones de generador son similares a listas por comprensión . Las expresiones generadoras producen un elemento a la vez, como un generador. Esto es diferente de una lista comprensiva que produce una lista completa, todo a la vez.

Vamos a escribir un generador para nuestro ejemplo de cookies:

 cookie_list = [" Frambuesa "," Choc-Chip "," Cinnamon "," Oat "] cookie_generator = (cookie para cookie en cookie_list) 

Nosotros & rsquo; ve definió una lista de cookies en la variable cookie_list . Luego creamos una expresión generadora. Esta expresión utiliza la sintaxis para las listas por comprensión, pero con una gran diferencia: las listas por comprensión se definen entre corchetes, mientras que los generadores se definen entre corchetes redondeados.

Creemos un bucle for que repita la expresión:

 para cookie en cookie_generator: print (cookie) 

Nuestro código devuelve:

Frambuesa

Choc-Chip

Canela

Avena

La respuesta de este generador es la misma que la de nuestro primer ejemplo. Nuestra sintaxis es significativamente más clara.

Es importante notar que cuando iteras sobre un generador que fue declarado usando una expresión de generador, no lo llamas como una función. Nuestro generador de cookie_generator no acepta ningún valor de entrada: ya contiene el código que necesita para iterar sobre la lista cookie_list .

Debe solo use la sintaxis de expresiones del generador cuando necesite escribir un generador que realice una función simple. Imprimir una lista de valores es un buen ejemplo; multiplicar valores en una lista por un número específico es otro buen ejemplo.

Esto se debe a que, si bien la sintaxis de la expresión del generador es clara, está diseñada principalmente para expresiones de una línea. Si su generador usará más de una línea de código, escríbalo como una función de generador usando la sintaxis que discutimos anteriormente en este artículo.





¿Por qué se usan los generadores?

La razón principal por la que se usan los generadores es que son más concisos que los iteradores.

Los generadores son como una función y no necesita ninguna declaración __init__, __iter__ o __next__ para funcionar. Esto es diferente a un iterador que requiere las tres declaraciones. Este comportamiento significa que puede implementar un generador en significativamente menos líneas de código de lo que podría si estuviera escribiendo un iterador.

Además, los generadores son eficientes en el uso de la memoria. Los generadores solo producen un elemento a la vez. No crean una secuencia completa en la memoria antes de devolver un resultado. Esto hace generadores muy prácticos si necesita iterar sobre una gran lista de datos.

La forma en que esto funciona es que los iteradores usan un método de evaluación perezoso. Solo generan el siguiente elemento de un objeto iterable ct cuando se solicita ese elemento.




Conclusión (y desafío)

Los generadores le permiten crear un iterador más Pythonic.

Los generadores facilitan para escribir objetos usando el protocolo de iterador sin tener que escribir declaraciones __init__, __iter__ o __next__. Los generadores se definen como funciones. Usan la declaración de rendimiento para detener un generador y pasar un valor al programa principal antes de regresar a sus operaciones normales.

Si está buscando un desafío, aquí tiene algunas ideas:

  • Escriba un generador que invierta una cadena.
  • Escriba un generador que solo devuelva valores que contengan una palabra específica de una lista de valores.
  • Escriba un generador que multiplique cada número en una lista por dos.

Para obtener más información, consulte nuestro tutorial sobre cómo escribir y utilizar iteradores de Python . ¡Ahora está listo para comenzar a trabajar con generadores en Python como un experto!





generador de python: StackOverflow Questions