は私が作るために、times()
という名前の関数をしたい:Pythonで、このようなツールはPythonでこのような関数型プログラミングツールを構築するには?
times(func,2)
同等lambda x:func(func(func(func(func(x)))))
に相当lambda x:func(func(x))
とtimes(func,5)
にありますか?自分で書きたいと思ったらコードはどのように見えますか?
ありがとうございます!
は私が作るために、times()
という名前の関数をしたい:Pythonで、このようなツールはPythonでこのような関数型プログラミングツールを構築するには?
times(func,2)
同等lambda x:func(func(func(func(func(x)))))
に相当lambda x:func(func(x))
とtimes(func,5)
にありますか?自分で書きたいと思ったらコードはどのように見えますか?
ありがとうございます!
これは実際にはn
の機能であるため、power()
と呼ぶことをおすすめします。そこ標準ライブラリには、そのような事はありませんが、あなたは簡単にそれを自分で実装することができます。
def power(f, n):
def wrapped(x):
for i in range(n):
x = f(x)
return x
return wrapped
おかげで、スヴェン
は、私はそれを行うには、再帰的な方法を見つけましたが、あなたはより多くのニシキヘビになります
を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
おかげで、スヴェン。 '' wrapped''関数は魔法になります。 –
できれば私はこの+100を与えるだろう。とてもエレガント! – inspectorG4dget
これを行うには反復**の代わりに**再帰的な**があるのかどうか疑問に思っています。 –