Recientemente estaba leyendo PEP 572 sobre expresiones de asignación y me topé con un caso de uso interesante:
# Compute partial sums in a list comprehension total = 0 partial_sums = [total := total + v for v in values] print("Total:", total) Empecé a explorar el fragmento por mi cuenta y pronto descubrí que :+= no era una sintaxis de Python válida.
# Compute partial sums in a list comprehension total = 0 partial_sums = [total :+= v for v in values] print("Total:", total) Sospecho que puede haber alguna razón subyacente en cómo se implementa := que sabiamente excluye :+= , pero no estoy seguro de cuál podría ser. Si alguien más sabio en las formas de Python sabe por qué :+= es inviable o poco práctico o no está implementado, por favor comparta su comprensión.
Tengo entendido que una parte importante de la eficiencia de comprensión es que los cálculos para cada elemento en el iterable original se pueden realizar en paralelo. Si está calculando un total acumulado, debe realizarse en serie.
Ya tenemos sum(values) , entonces, ¿qué agrega esto en este caso de uso?
Si desea algo para casos de uso más generales, functools tiene reduce .
El módulo itertools proporciona muchos de los mecanismos para lograr el mismo resultado sin inflar el lenguaje:
partial_sums = list(accumulate(values)) total = partial_sums[-1]