Pythonでは、別の関数を返す関数make_cylinder_volume(r)
を書きたいと思います。返される関数は、パラメータh
で呼び出し可能で、高さがh
、半径がr
の円筒の体積を返します。別の関数を返す関数を作成するにはどうすればよいですか?
私は、Pythonの関数から値を返す方法を知っているが、どのように私は別の関数を返すのですか?
Pythonでは、別の関数を返す関数make_cylinder_volume(r)
を書きたいと思います。返される関数は、パラメータh
で呼び出し可能で、高さがh
、半径がr
の円筒の体積を返します。別の関数を返す関数を作成するにはどうすればよいですか?
私は、Pythonの関数から値を返す方法を知っているが、どのように私は別の関数を返すのですか?
の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として知られています。
カレーへの参照を追加していただき、ありがとうございます。私は2回upvoteすることができますことを願っています。 – HeatfanJohn
あなたが渡した「10」はどこかに保存されていますか?いつガベージコレクションされますか? – sudo
@sudo https://en.wikipedia.org/wiki/Closure_(computer_programming)をご覧ください。 –
はちょうどあなたが単一の行にmake_cylinder_volume_func
内部volume
機能アウト抽象的なことができ、あなたはまた、匿名関数として知られているラムダを使用しpymonad
import pymonad
@pymonad.curry
def add(a, b):
return a + b
add5 = add(5)
add5(4)
9
でこれを行うことができますことを指摘したいと思います。 ÓscarLópezの答えと異なる点はありませんが、ラムダを使った解決策はまだまだ意味があります。
volume_radius_1 = make_cylinder_volume_fun(1)
volume_radius_1(1)
=> 3.141592653589793
http://stackoverflow.com:あなたと思い、他のカリー化関数として呼び出して
そして:
この
では、ラムダ式を使用して受け入れ答えを書くことができる方法です/ questions/245192/what-are-first-class-objects –