3

この例は、関数を別の関数の引数として使用する方法を紹介している Python の本で見ました。

def diff2(f, x, h=1E-6):
    r = (f(x-h) - 2*f(x) + f(x+h))/float(h*h)
    return r

def g(t):
    return t**(-6)

t = 1.2
d2g = diff2(g, t)
print d2g

私の質問は、関数 g に引数を指定せずにこのスクリプトがどのように機能するかということです。問題の行は次のとおりです。

d2g = diff2(g,t)

次のようにすべきではありませんか:

d2g = diff2(g(t), t)
4

2 に答える 2

3

問題の関数はかなりランダムで、おそらく理解するのが難しいでしょう。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)

compute2 つの数値の積を求めることができます。

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
于 2013-04-10T23:16:22.073 に答える