Generadores en Python

Generadores Python : Aquí, vamos a aprender acerca de los generadores Python con ejemplos , también explicará acerca de los generadores que utilizan lista por comprensión.

Generadores son similares a las listas por comprensión, pero están rodeados por paréntesis. Los generadores y lista por comprensión producen el mismo resultado, pero funcionan de manera diferente.

Cuando se ejecuta una lista de comprensión, produce todos sus datos antes de que cualquier otro proceso que ocurre. La lista por comprensión tarda un tiempo class que producen datos, retrasa cualquier otro código se ejecute hasta que la lista de comprensión concluye.

long ejemplo,

Python 3.6.8 (default, Apr 25 2019, 21:02:35)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> for i in [x*3 for x in [1,2,3,4]]:
... print(i)
...
3
6
9
12
>>>

En el ejemplo anterior, ya que la lista es pequeña la memoria consumida es muy inferior. Sin embargo, si la lista produce una enorme cantidad de elementos, entonces tenemos un problema.

generadores producen elementos de datos uno a la vez

La lista anterior comprensión se modifica para ser un generador como abajo,

>>> for i in (x*3 for x in [1,2,3,4]):
... print(i)
...

A diferencia de la lista por comprensión, que debe concluir antes de que cualquier otro tipo de código se puede ejecutar, una generador de rendimientos de datos tan pronto como los datos se produce por el código generadores, que significa que si el generador genera enormes elementos de datos, y cualquier código que se espera consumir el resultado se ejecuta inmediatamente generados.

Ejemplo:

Utilizando lista comprensión , en el siguiente ejemplo, el For respuesta tanto a las URL se devuelve al mismo tiempo, lo que significa que espera la sentencia print for la lista para llevar a cabo su acción,

Python 3.6.8 (default, Apr 25 2019, 21:02:35)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
>>> from datetime import datetime
>>> urls = ('http://www.includehelp.com', 'https://www.linkedin.com/')
>>> for resp in [requests.get(url) for url in urls]:
... print(len(resp.content), '->', resp.status_code, '->', resp.url, '->', datetime.now())
...
132281 -> 200 -> https://www.includehelp.com/ -> 2019-10-30 17:51:41.099558
82131 -> 200 -> https://www.linkedin.com/ -> 2019-10-30 17:51:41.099726

el uso de generadores , en el siguiente ejemplo, el tiempo de respuesta for cada una de URL en las direcciones URL es considerable diferente y explica la ejecución del generador.

Python 3.6.8 (default, Apr 25 2019, 21:02:35)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
>>> from datetime import datetime
>>> urls = ('http://www.includehelp.com', 'https://www.linkedin.com/')
>>> for resp in (requests.get(url) for url in urls):
... print(len(resp.content), '->', resp.status_code, '->', resp.url, '->', datetime.now())
...
132281 -> 200 -> https://www.includehelp.com/ -> 2019-10-30 17:51:54.832263
82124 -> 200 -> https://www.linkedin.com/ -> 2019-10-30 17:51:54.971670


Deja un comentario

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