2012-07-20 13 views

risposta

15

Si consiglia di chiamare questo power(), poiché questo è in realtà il n th di una funzione. Non v'è nulla di simile nella libreria standard, ma si può facilmente implementare da soli:

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

Grazie, Sven. La funzione '' wrapped'' sembra magica. –

+0

Vorrei dare questo +100 se potessi. Così elegante! – inspectorG4dget

+0

Mi stavo chiedendo se c'è un modo ** ricorsivo ** invece di ** iterativo ** per farlo .. –

5

Grazie, Sven

ho trovato un modo ricorsivo per farlo, ma la tua sembra più divinatorio:

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 

E un modo implementato con decoratore:

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 
Problemi correlati