問題の関数はかなりランダムで、おそらく理解するのが難しいでしょう。sum
簡単な例として、 2 つの数値a
とを取りb
、それらの合計を返す関数を考えてみましょう。prod
実際、積を返す別の関数を簡単に定義できます。
def sum(a,b):
return a + b
def prod(a,b):
return a * b
compute
引数として演算 (関数) と 2 つのオペランド (関数を呼び出す 2 つの数値) を取る別の functionがあるとします。ではcompute
、引数に対して特定の操作を呼び出します。
def compute(fn, a, b):
return fn(a, b)
私たちはcompute
さまざまなことをすることができます。compute
次の 2 つのsum
数値を計算できます。
compute(sum, 1, 3)
compute
2 つの数値の積を求めることができます。
compute(prod, 1, 3)
基本的に、関数名の後にかっこがない場合、実際に関数を呼び出しているわけではありません。名前空間内の別のオブジェクトです (これはたまたま呼び出し可能な関数です)。compute
を実行するときは、の内部まで関数を呼び出しませんfn(a,b)
。
コンソール出力がどのように見えるか見てみましょう:
>>> compute(sum,1,3)
4
>>> compute(prod,1,3)
3
>>> sum
<function sum at mem-address>
>>> prod
<function prod at mem-address>
>>> sum(1,2)
3