2012-07-20 12 views

Respuesta

15

Sugiero llamar a esto power(), ya que esta es realmente la n potencia de una función. No hay tal cosa en la biblioteca estándar, pero se puede implementar fácilmente usted mismo:

def power(f, n): 
    def wrapped(x): 
     for i in range(n): 
      x = f(x) 
     return x 
    return wrapped 
+0

Gracias, Sven. La función '' wrapped'' se ve mágica. –

+0

Daría este +100 si pudiera. ¡Muy elegante! – inspectorG4dget

+0

Me pregunto si hay una forma ** recursiva ** en lugar de ** iterativa ** para hacer esto ... –

5

Gracias, Sven

he encontrado una manera recursiva para hacer eso, pero el suyo se parece más Pythonic:

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 manera práctica con decorador:

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 
Cuestiones relacionadas