7

times()次のようにするために、という名前の関数が必要です。

times(func,2)に相当lambda x:func(func(x))

times(func,5)同等lambda x:func(func(func(func(func(x)))))

Pythonにそのようなツールはありますか?自分で書きたい場合、コードはどのようになりますか?

ありがとう!

4

2 に答える 2

15

I'd suggest to call this power(), since this is actually the nth power of a function. There is no such thing in the standard library, but you can easily implement it yourself:

def power(f, n):
    def wrapped(x):
        for i in range(n):
            x = f(x)
        return x
    return wrapped
于 2012-07-20T23:46:36.100 に答える
5

ありがとう、スヴェン

私はそれを再帰的に行う方法を見つけましたが、あなたの方法はよりPython的に見えます:

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
于 2012-07-21T00:14:05.687 に答える