33. Currying
Crea una función que implemente el concepto de "currying". Currying es la técnica de transformar una función que toma múltiples argumentos en una secuencia de funciones que toman un solo argumento cada una.
La función curry debe aceptar una función f (que toma n argumentos) y devolver una nueva función "currificada". Al llamar a la función currificada con un argumento, debe devolver otra función que espera el siguiente argumento, y así sucesivamente, hasta que todos los argumentos hayan sido proporcionados, momento en el cual se ejecuta la función original f.
def curry(func):
"""
Transforma una función de múltiples argumentos en una secuencia de funciones de un solo argumento.
"""
def curried(*args):
if len(args) >= func.__code__.co_argcount:
return func(*args)
def f_next(*new_args):
return curried(*(args + new_args))
return f_next
return curried
# Ejemplo de uso
def sumar(a, b, c):
return a + b + c
sumar_curry = curry(sumar)
# Paso a paso
resultado_parcial = sumar_curry(1)
resultado_parcial_2 = resultado_parcial(2)
resultado_final = resultado_parcial_2(3)
# resultado_final es 6
# Directamente
sumar_curry(1)(2)(3)
# 6
# Con algunos argumentos iniciales
sumar_uno_dos = sumar_curry(1)(2)
sumar_uno_dos(3)
# 6
Ratoncito
Implementa la función curry para que funcione con funciones de una cantidad fija de argumentos.
Dragón
Extiende la función curry para que pueda manejar funciones con argumentos por defecto (*args o **kwargs en Python si es el lenguaje de ejemplo, aunque esto es más conceptual) o para que sea más flexible en la forma en que se aplican los argumentos (por ejemplo, permitiendo aplicar múltiples argumentos en una sola llamada intermedia, no solo uno por uno).
Este trabajo está bajo una licencia Attribution-NonCommercial-NoDerivatives 4.0 International.
Apóyame en Ko-fi