Conceptos básicos de Python: expresión del generador

Una expresión generadora es un objeto que realiza el mismo cálculo que contiene una lista, pero produce resultados iterativamente. La sintaxis también es la misma que para la inclusión de listas, pero se utilizan paréntesis en lugar de corchetes .

(expression for item1 in iterable1 if condition1
            for item2 in iterable2 if condition2
            ...
            for itemN in iterableN if conditionN)

A diferencia de las listas por comprensión, las expresiones generadoras en realidad no crean listas ni evalúan inmediatamente las expresiones entre paréntesis. En su lugar, crea un objeto generador que itera y produce valores según sea necesario , por ejemplo:

inserte la descripción de la imagen aquí

La diferencia entre las listas de comprensión y las expresiones generadoras es importante, pero sutil.

Cuando se usa la comprensión de listas, python en realidad crea listas que contienen los datos resultantes. Al usar una expresión de generador, Python crea un generador que solo sabe cómo generar datos según sea necesario. En algunas aplicaciones, esto puede afectar en gran medida el rendimiento y el uso de la memoria.

  • Comprensión de lista --> Usando [ ], crea una lista que contiene el resultado
  • Expresión de generador --> use ( ), cree un generador
# 读取一个文件
f = open("data.txt")                    # 打开文件
lines = (t.strip() for t in f)          # 读取行,并删除前后空白
comments = (t for t in lines if t[0] == '#')    # 所有注释
for c in comments:
    print(c)

En este ejemplo, la expresión del generador extrae líneas y elimina espacios en blanco, pero en realidad no lee todo el archivo en la memoria. Lo mismo ocurre con las expresiones que extraen comentarios. En su lugar, las líneas del archivo se leen cuando el programa comienza a iterar a través del ciclo for.

Durante este proceso iterativo, las líneas del archivo se generan y filtran según sea necesario. De hecho, el archivo completo nunca se carga en la memoria durante este proceso. Así que esta es una forma eficiente de extraer comentarios de archivos fuente de python muy grandes.

A diferencia de las listas por comprensión, las expresiones generadoras no crean secuencias de objetos. No se puede indexar, ni ninguna operación de lista normal, como append(). Sin embargo, las expresiones del generador se pueden convertir en listas utilizando la función list() integrada, por ejemplo:

clist = list(comments)

Supongo que te gusta

Origin blog.csdn.net/hubing_hust/article/details/127881499
Recomendado
Clasificación