2016-07-09 8 views

答えて

2

それを分解して働いているかを私に説明working.Canされるようにこの1つは実際に私を混乱さです

apply_twice(add_five,10))

add_five(add_five(10)) # add_five(10) = 15

printコールで始まる、次の apply_twiceが呼び出されると20

は、あなたが関数オブジェクトと値を渡している:あなたの結果を与える

add_five(15) # add_five(15) = 20

apply_twiceの定義のように、funcが渡された関数オブジェクト(この場合はadd_five)で置き換えられています。次に、内部のfunc(arg)コールから始めて、結果を評価し、add_fiveにもう一度、return func(...)コールで渡します。

7

機能apply_twice(func,arg)は二つの引数、関数オブジェクトfuncargと呼ばれる機能funcに渡す引数を取ります。 Pythonで

、機能を容易に引数として他の関数に周りに渡すことができ、それらは異なる他の引数の型(すなわちfirst class citizens)よりも扱われていません。 apply_twiceインサイド

funcはラインに2回呼び出され:

代わりとして、より親しみやすい方法で表示することができ、
func(func(arg)) 

:あなたが名前でfuncを交換した場合

res = func(arg) 
func(res) 

add_fiveに渡された関数のうち、次のものが得られます。

res = add_five(arg) # equals: 15 
add_five(res)  # result: 20 

あなたの期待した結果を返します。このことから覚えて

キーポイントはあなたには、いくつかの特別な構築物としてPythonの関数を考えるべきではないということです、機能がちょうどintのようなオブジェクト、lists秒であり、他のすべてがあります。

関連する問題