2017-05-18 8 views
-2

私は2番目の関数を得ることはできません。2番目の関数は何を手助けすることができますか?私は初心者であり、非常に基本的な方法で私に説明してください。Python 3.xの基本機能

あなたが引数として関数を渡すことができます(あなたは引数を渡すときに実際にPythonの種類を気にしません):
def add(x, y): 
    return x + y 

def do_twice(func, x, y): 
    return func(func(x, y), func(x, y)) 

a = 5 
b = 10 

print(do_twice(add, a, b)) 
+0

結果は何ですか?なぜそれは混乱していますか?質問を更新してください。 –

答えて

3

Pythonは高次のプログラミングをサポートしています。

do_twice(add, a, b)に電話するとどうなりますか?さて、do_twicefunction = addx = 5y = 10と呼んでください。今、私たちはdo_twiceの身体を検査:

return func(func(x,y),func(x,y)) 

ザ・Pythonインタプリタは、この文を解釈し、第1(1左)func(x,y)を評価します。したがって、それはadd(5,10)を呼び出します。 add関数がどのように機能するかを理解しているので、関数は15を返します。次にPythonはfunc(x,y)(右のもの)を評価するので、add(5,10)を呼び出して、15と評価します。

func = addから最後にfunc(15,15)が呼び出されるため、add(15,15)が呼び出され、30となります。これが返されます。結果はこのようになります

do_twice(lambda x,y: x+2*y,5,10) 

75あなたのようなラムダ式do_twiceと呼ばれていた場合は

(lambda x,y:x+2*y)(5,10)25であり、(lambda x,y:x+2*y)(25,25)75であるためです。

+0

本当にあなたの答えに感謝します。ありがとう、私はついにあなたのためにそれを得ました。 –

1

ます。また、このようなあなたの第2の機能を書くことができます:あなたは基本的には、一時的な変数でfuncから3つのコール(val1と、VAL2、val3は)のそれぞれの結果を格納している

def do_twice(func, x, y): 
    val1 = func(x, y) 
    val2 = func(x, y) 
    val3 = func(val1 , val2) 
    return val3 

その方法。あなたは自分の価値観5と10とprint(do_twice(add, a, b))を呼び出す場合

は今、次の処理が行われます。

def do_twice(func, x, y): 
    # x = 5, b = 10 
    val1 = func(x, y) 
    # val1 = 5+10 = 15 
    val2 = func(x, y) 
    # val2 = 5+10 = 15 
    val3 = func(val1, val2) 
    # val3 = 15+15 = 30 
    return val3 
+0

しかし、funcは私のコードでfuncを追加する変数を作成したことがないので、追加することを意味します。 –

+0

関数は、他の関数にパラメータとして渡すことができるPythonのオブジェクトでもあります。 '' do_twice(add、a、b)) ''を呼び出すことによって '' do_twice''にパラメータとして '' add''を渡していますが** ** '' do_twice''の中ではパラメータは'' func''( '' def do_twice(func、x、y): ''関​​数の最初の引数は '' func''で宣言されています)と呼ばれています。しかし、 '' func''はまだ関数 '' add''を参照しています。したがって、 '' func(x、y) ''を 'do_twice'の中で実行することは' 'add(x、y)' 'を実行するのと同じです。 –

0

第二は、単に最初の関数を取り、それに供給された入力を適用します。 do_twiceにはfuncという関数があります。 funcには、xとyを必要とするadd()というfuncの例があります。 do_twice()はadd()をとり、それにxとyを与えてから答えを返します。したがって、do_twiceはadd(add(x、y)、add(x、y))を返します。