Pythonでは、別の関数を返す関数make_cylinder_volume(r)
を書きたいと思います。返された関数は、パラメータh
で呼び出し可能で、高さh
および半径r
の円柱の体積を返す必要があります。
Pythonの関数からvaluesを返す方法は知っていますが、どのようにして別の関数を返すのですか?
Pythonを使用して、これを試してください:
import math
def make_cylinder_volume_func(r):
def volume(h):
return math.pi * r * r * h
return volume
このように使用します。たとえば、radius=10
およびheight=5
:
volume_radius_10 = make_cylinder_volume_func(10)
volume_radius_10(5)
=> 1570.7963267948967
関数を返すことは、関数内で新しい関数を定義し、最後にそれを返すという単純な問題であることに注意してください-各関数に適切なパラメーターを渡すように注意してください。参考までに、別の関数から関数を返す手法は currying として知られています。
匿名関数とも呼ばれるラムダを使用すると、make_cylinder_volume_func
内のvolume
関数を1行に抽象化できます。オスカー・ロペスの答えと何ら変わりはありませんが、ラムダを使用した解決策は、ある意味で「より機能的」です。
これは、ラムダ式を使用して受け入れられた答えを書く方法です。
import math
def make_cylinder_volume_fun(r):
return lambda h: math.pi * r * r * h
そして、他のカリー化された関数と同じように呼び出します:
volume_radius_1 = make_cylinder_volume_fun(1)
volume_radius_1(1)
=> 3.141592653589793
あなたがpymonadでこれを行うことができることを指摘したいだけです
import pymonad
@pymonad.curry
def add(a, b):
return a + b
add5 = add(5)
add5(4)
9