rossum - ¿Cómo construir una herramienta de programación funcional en Python?
python descargar (2)
Quiero una función llamada times()
, para hacer:
times(func,2)
equivalente a lambda x:func(func(x))
y times(func,5)
equivalentes a lambda x:func(func(func(func(func(x)))))
¿Hay tal herramienta en Python? ¿Cómo se vería el código si quisiera escribirlo solo?
¡Gracias!
Sugeriría que se llame a esta power()
, ya que esta es realmente la n
ésima potencia de una función. No existe tal cosa en la biblioteca estándar, pero puede implementarla usted mismo fácilmente:
def power(f, n):
def wrapped(x):
for i in range(n):
x = f(x)
return x
return wrapped
Gracias, Sven
Encontré una forma recursiva de hacerlo, pero la tuya parece más pitonica:
def power(func, n):
def lazy(x, i=n):
return func(lazy(x, i-1)) if i > 0 else x
return lazy
>>> power(lambda x:x*2,3)(9)
72
>>> power(lambda x:x*2,2)(9)
36
>>> power(lambda x:x*2,1)(9)
18
>>> power(lambda x:x*2,0)(9)
9
Y una forma implementada con Decorator:
def powerize(n):
def wrapped(func):
def newfunc(*args):
return power(func,n)(*args)
return newfunc
return wrapped
@powerize(3)
def double_3(x):
return x*2
>>> double_3(8)
64