python functional-programming

python - plotly title



Alternativa de Python para reducir() (2)

Hay un artículo semi famoso escrito por el propio Guido que insinúa que reduce() debe seguir el camino del dodo y dejar el idioma. Incluso fue degradado de ser una función de nivel superior en Python 3 (en lugar de ser rellenado en el módulo functools ).

Con muchas otras grapas de programación funcional (mapa, etc.) hay disponibles alternativas claras comunes. Por ejemplo, la mayoría de las veces un map() se escribe mejor como una lista de comprensión.

Lo que me gustaría saber es si existe una alternativa "más pitónica" similar a la función de reducción. Tengo un poco de experiencia en programación funcional (ML en particular), así que reduce() cuando pienso en una solución, pero si hay una forma mejor de hacerlo (excepto desenrollar una llamada reducida en un bucle for ) Me gustaría saber.


Como dice el artículo vinculado de Guido, simplemente debe escribir un ciclo for explícito si desea evitar la reduce() . Puedes reemplazar la linea

result = reduce(function, iterable, start)

por

result = start for x in iterable: result = function(result, x)


Lo que me gustaría saber es si existe una alternativa "más pitónica" similar a la función de reducción.

Si y no. Depende del caso de uso.

En el artículo vinculado, Guido sugiere que la mayoría de las reducciones, pero no todas, deben escribirse como bucles. Hay circunstancias limitadas en las que ve que reduce es aplicable.

Así que, en mi opinión, la aplicabilidad de reduce () se limita bastante a los operadores asociativos, y en todos los demás casos es mejor escribir explícitamente el ciclo de acumulación.

No hay muchos operadores asociativos. (Esos son operadores X para los cuales (a X b) X c es igual a X (b X c).) Creo que se limita a +, *, &, |, ^, y atajo y / o.