2017-11-05 15 views
0

高次関数(関数1)でコードを書くことが割り当てられています。しかし、なぜ私はそれを通常のもの(関数2)の代わりに書くべきかわかりません。高次機能が優れていると誰かが私を見せてくれたら本当に感謝します。高次関数 - Python

# Function 1 (High order): 
def high_function (L): 
    def function (x): 
     total = 0 
     for i in range(len(L)): 
      total = total + x **(len(L) - 1 - i) * L[i] 
     return total 
    return function 

# Function 2 (Normal): 
def high_function (L, x): 
    total = 0 
    for i in range(len(L)): 
     total = total + x **(len(L) - 1 - i) * L[i] 
    return total 
+0

ので。 –

+0

あなたはこれを質問として言い換えることができますか?意見の問題ではないことが望ましいでしょうか?あなたがスタイルや練習の議論をしたいのであれば、dreamincode.netのようなサイトでこれらの質問を奨励しています。 –

+0

まあ...これは一種の高次ですが、もっとも一般的な種類の高次関数ではありません。この変換は、マルチパラメータ関数を関数を関数に返す関数に変えるカリー同型写像(curry isomorphism)と呼ばれます。高次関数は他の関数を受け入れる場合に便利です。つまり、関数はパラメータの1つになります。このタイプのコードはPythonの文脈ではあまり意味がないと私はあなたに同意します。 – HuStmpHrrr

答えて

0

私は関数型プログラミングの正式な知識が不足しているが、本質的には、高次機能を持つことは、あなたが必要な関数を作成し、他の高階関数に渡すことができます。

オブジェクトが他のオブジェクトを取り込むのと同じように、関数を第一級市民として扱う言語では、関数を他の関数に渡すことができます。

def add(a): 
    def func(b): 
     return a + b 

    return func 

あなたが関数内で関数を作成する際、内側の関数が範囲内であることを

twoMore = add(2) 
x = 10 
xPlusTwo = twoMore(x) 

注意を必要に応じてこのadd関数は、関数を作成するために使用することができ、この例を考えてみましょう外部機能のスコープにアクセスできます。 add関数の場合、funcは、addによって返されたときにaにアクセスし、twoMoreで使用されます。

だけで、周りの機能を渡すことについての私のポイントを締結

def filter_list(valid, list): 
    return [item for item in list 
       if valid(item)] 

def is_greater_than(value): 
    def func(item): 
     return item > value 

    return func 

my_list = [1,2,3,4,5,6,7] 
gt5 = is_greater_than(5) 
new_list = filter_list(gt5, my_list) 
2

まずこの他の例を検討し、使用量がより明確になるように、あなたの機能より良い名前を与える:

def polynomial(factors): 
    def eval(x): 
     result = 0 
     for factor in factors: 
      result = x * result + factor 
     return result 
    return eval 

ので、関数は、多項式を定義するために使用されます。これは、異なると評価するために使用できます。x

parabola = polynomial([1, 0, 0]) 

そしてどこかにそれを使用する:最初はあなたがコードのどこにいるかに応じて、 'L'または 'X'のいずれかを持っていないことを可能にする

value = parabola(0.4)