He visto algunos fragmentos elegantes de python que utilizan la comprensión de listas y la reducción de mapas. ¿Puedes compartir algunos de estos códigos o sitios web?Fragmentos de programación funcional de Python
Gracias.
He visto algunos fragmentos elegantes de python que utilizan la comprensión de listas y la reducción de mapas. ¿Puedes compartir algunos de estos códigos o sitios web?Fragmentos de programación funcional de Python
Gracias.
Hay algunos bonitos fragmentos estilo funcional en aquí: Functional Programming HOWTO
Aquí es una especie rápida:
def qsort (list):
if (len(list) > 1):
list = qsort(filter (lambda x: x <= list[0], list[1:])) + [list[0]] + qsort(filter (lambda x: x > list[0], list[1:]))
return list
Ésta es una solución a un rompecabezas de programación de encontrar un número que falta entre los números enteros de 1 a 100:
from random import randint
nos = range(1,101)
to_remove = randint(1,100)
nos.remove(to_remove)
print "Removed %d from list" % to_remove
found = 5050 - reduce (lambda x,y: x+y, nos)
print "You removed %d " % found
Python is not lisp. Por favor, no intente que se vea de esa manera. Solo reduce una de las mayores fortalezas de Python, que es su legibilidad y comprensión más adelante.
Si te gusta la programación funcional, aprende Haskell, ML, o F#. Se sorprenderá de lo que ofrecen esos idiomas (para empezar, funciones puras).
Estoy de acuerdo con ML: a menudo se pasa por alto – zebrabox
Tenga cuidado al programar python en estilo funcional. La única razón para hacerlo es por la legibilidad. Si el algoritmo se expresa de forma más elegante funcionalmente que imperativamente, y no causa problemas de rendimiento (por lo general no lo hace), adelante.
Sin embargo, python no optimiza la recursividad de cola, y tiene un límite de recursión fijo de 1000, por lo que generalmente no puede hacer O (n) recursividad, solo O (log (n)).
Además, reduce() se elimina en python 3, por una buena razón (http://www.artima.com/weblogs/viewpost.jsp?thread=98196). La mayoría de los usos no triviales de reducir son más legibles como un bucle normal en lugar de una reducción, y sum() ya está incorporado.
'reduce' aunque todavía está en' functools'. – max
¡Buena pregunta, pero ** comunidad wiki **! –