Función Curry en Python

En la resolución de problemas y la programación funcional, curry es la práctica de simplificar la ejecución de una función que toma múltiples argumentos para ejecutar funciones secuenciales de un solo argumento. En términos simples, Currying se utiliza para transformar una función de varios argumentos en una función de un solo argumento mediante la evaluación del anidamiento incremental de los argumentos de la función. Currying también repara un argumento con otro forma un patrón relativo durante la ejecución.

Ilustración matemática del currículo:
en general, el currículo de funciones requiere cualquier número de cálculos y datos en una sola función real que devuelve un resultado esperado. Aquí tomamos,

f(x, y) = (x*x*x) + (y*y*y)
h(x) = (x*x*x)
h(y) = (y*y*y)
h(x)(y) = h(x)+h(y)
f(x, y) = h(x)(y)
Curry f = h(x)(y)

Por ejemplo, tomaremos el enstringmiento de la composición de la función.

a(x) = b(c(d(x)))

def change(b, c, d):
    def a(x):
        return b(c(d(x)))
    return a

v(a, b, c, d, e) = w(x(y(z(a, b, c, d, e))))

# Currying in Python - Many to Single Argument
 def change(a):
    def w(b):
        def x(c):
            def y(d):
                def z(e):
                    print(a, b, c, d, e)
                return z
            return y
        return x
    return w
   
change(10)(20)(30)(40)(50)

Producción:

10 20 30 40 50

Aquí, el concepto anida una función en otra función y, por lo tanto, el resultado de una función se registra en la string de funciones. Allí, simplificando un gran bloque de manipulación a bloques secuenciales más simples.

Código #1: Cambia kilómetro a metro y metro a centímetro.

# Demonstrate Currying of composition of function
def change(b, c, d):
    def a(x):
        return b(c(d(x)))
    return a
      
def kilometer2meter(dist): 
    """ Function that converts km to m. """
    return dist * 1000
      
def meter2centimeter(dist): 
    """ Function that converts m to cm. """
    return dist * 100
      
def centimeter2feet(dist):
    """ Function that converts cm to ft. """
    return dist / 30.48
      
if __name__ == '__main__':
    transform = change(centimeter2feet, meter2centimeter, kilometer2meter )
    e = transform(565)
    print(e)
     

Producción:

1853674.5406824148

 
Código #2:

# Demonstrate Currying of composition of function
  
def change(b, c, d):
    def a(x):
        return b(c(d(x)))
    return a
      
def daystohour(time): 
    """ Function that converts days to hours. """
    return time * 24
      
def hourstominutes(time): 
    """ Function that converts hours to minutes. """
    return time * 60
      
def minutestoseconds(time):
    """ Function that converts minutes to seconds. """
    return time * 60
      
if __name__ == '__main__':
    transform = change(minutestoseconds, hourstominutes, daystohour)
    e = transform(10)
    print(e)
     

Producción:

864000

Publicación traducida automáticamente

Artículo escrito por MerlynShelley y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *