2012-07-20 3 views

答えて

15

これは実際にはnの機能であるため、power()と呼ぶことをおすすめします。そこ標準ライブラリには、そのような事はありませんが、あなたは簡単にそれを自分で実装することができます。

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

おかげで、スヴェン。 '' wrapped''関数は魔法になります。 –

+0

できれば私はこの+100を与えるだろう。とてもエレガント! – inspectorG4dget

+0

これを行うには反復**の代わりに**再帰的な**があるのか​​どうか疑問に思っています。 –

5

おかげで、スヴェン

は、私はそれを行うには、再帰的な方法を見つけましたが、あなたはより多くのニシキヘビになります

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 

そしてデコレータで実装方法:

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 
関連する問題