Generadores Python 101

May 02 2023
Python es un lenguaje de programación versátil que permite una codificación eficiente y efectiva con varias funciones, incluidos los generadores de Python. Los generadores en Python son funciones que producen una secuencia de resultados en lugar de un solo valor.

Python es un lenguaje de programación versátil que permite una codificación eficiente y efectiva con varias funciones, incluidos los generadores de Python. Los generadores en Python son funciones que producen una secuencia de resultados en lugar de un solo valor. Esta secuencia de valores se crea de forma perezosa
, lo que significa que el siguiente valor se genera solo cuando es necesario y el valor anterior se descarta, lo que hace que la memoria sea eficiente. En este blog, exploraremos el concepto de generadores en detalle, cómo crearlos y cómo usarlos en programas de Python.

Foto de Hitesh Choudhary en Unsplash

¿Qué son los generadores Python?
Los generadores de Python son iterables, lo que significa que se pueden usar en bucles. Un generador se crea utilizando una función que contiene una declaración de rendimiento en lugar de una declaración de retorno. Cuando invocamos una función generadora, devuelve un objeto iterador, que se puede usar para iterar sobre la secuencia de valores generados por el generador. La declaración de rendimiento crea cada valor de secuencia y la función del generador se detiene hasta que se solicita el siguiente valor.

Crear un generador en Python

Crear un generador en Python es fácil. Todo lo que tiene que hacer es definir una función que contenga una yielddeclaración. Vamos a crear un generador simple que genere una secuencia de números.

def number_sequence(n): 
  i = 0
  while i < n: 
    yield i 
    i += 1

for i in number_sequence(5): 
  print(i)

0 1 2 3 4

Funcionamiento de un generador en Python

Cuando se llama a una función generadora, devuelve un objeto iterador, que se puede usar para iterar sobre la secuencia de valores generados por el generador. La yielddeclaración se usa para generar cada valor de la secuencia y la función del generador se detiene hasta que se solicita el siguiente valor. Veamos cómo funciona esto.

def number_sequence(n):
    i = 0
    while i < n:
        yield i
        i += 1

seq = number_sequence(5)
print(next(seq)) # prints 0
print(next(seq)) # prints 1
print(next(seq)) # prints 2
print(next(seq)) # prints 3
print(next(seq)) # prints 4
Output:
0
1
2
3
4

Ejemplos de generadores de Python

Ahora que comprendemos qué son los generadores y sus ventajas, veamos algunos ejemplos de generadores de Python.

  1. Generador de secuencias de Fibonacci:
  2. def fibonacci():
        a, b = 0, 1
        while True:
            yield a
            a, b = b, a + b
    

def file_reader(filename):
    with open(filename, 'r') as file:
        for line in file:
            yield line

3. Generador de contador:

def counter(start=0, step=1):
    n = start
    while True:
        yield n
        n += step

Ventajas de usar Generadores de Python

Las ventajas de utilizar Python Generators tienen varias ventajas sobre otros métodos de generación de secuencias de valores.

  1. Memoria eficiente: los generadores son eficientes en memoria porque generan valores sobre la marcha en lugar de generarlos y almacenarlos en la memoria.
  2. Computación eficiente: los generadores también son computacionalmente eficientes porque generan solo los valores requeridos. Esto los hace más rápidos y eficientes que otros métodos de generación de secuencias.
  3. Secuencias infinitas: los generadores también pueden generar secuencias infinitas de valores, lo que es imposible con otros métodos de generación de secuencias.
  4. Evaluación diferida: los generadores utilizan la evaluación diferida, lo que significa que solo evalúan una expresión cuando es necesario, lo que permite un uso eficiente de los recursos.
  5. Capacidad para encadenar iteradores: los generadores se pueden encadenar para crear secuencias complejas de valores, lo que permite flexibilidad en la generación de secuencias.
  6. Con estado: los generadores ayudan a mantener el estado entre llamadas, lo que permite la generación de secuencias complejas con un esfuerzo mínimo.
  7. Reducir el código repetitivo : los generadores pueden reducir el código repetitivo necesario para generar valores de secuencia, lo que facilita la lectura y el mantenimiento del código.

Los generadores de Python son herramientas poderosas que pueden generar secuencias de valores de manera eficiente y perezosa. Los generadores son eficientes en memoria, computacionalmente eficientes y fáciles de usar. Pueden generar infinitas secuencias de tratos y encadenarse para crear arreglos complejos. Los generadores son una parte central del lenguaje Python y se usan ampliamente en muchas bibliotecas y marcos de Python. El uso de generadores en su código puede hacer que su código sea más legible y mantenible y se considera Pythonic.