2017-03-07 7 views
-3

タイトル上記のf(x)の代わりにlambda関数を実行する次のコードはなぜですか?

なぜ次のコードが最初の関数を無視し、代わりに2番目の関数を実行するのかわかりません。

def f(x): 
    return 100 
f = lambda x: 1 if x < 2 else x + f(x-1) 
print(f(5)) 

出力は15

おかげです。

+3

なぜ最初の関数を実行すると思いますか? – user2357112

+1

'def f(x)...'はこの場合 'f = lambda x:100'と等価です(より複雑な関数ではこれは成り立ちません) – TemporalWolf

+0

関数定義は何らかの代入をしません - ' f'他の変数と同じです。最初に 'f'を' 100'を返す関数に代入した後、 'f'を別の関数に代入して' f'を呼び出します。あなたが定義したラムダ関数ですので、それを呼び出すでしょう –

答えて

1

fの2番目の定義は、最初の定義を上書きします。変数は2つの値を持つことはできません。関数名は事実上の変数です。 fに割り当てると、fの値が上書きされるため、元の機能にアクセスできなくなります。

+0

ありがとうございました – user21312

2

fと最初の関数を定義します。直ちに、の異なるファンクションを使用してそれを上書きします。fと呼びます。これはちょうどあなたがコードを実行したいかのようである:

f = [1, 2, 3] 
f = 7 
print f 

あなただけを取得します。リストは失われます。

+0

ありがとうございました。 – user21312

関連する問題