タイトル上記の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
おかげです。
タイトル上記の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
おかげです。
f
の2番目の定義は、最初の定義を上書きします。変数は2つの値を持つことはできません。関数名は事実上の変数です。 f
に割り当てると、f
の値が上書きされるため、元の機能にアクセスできなくなります。
ありがとうございました – user21312
fと最初の関数を定義します。直ちに、の異なるファンクションを使用してそれを上書きします。をfと呼びます。これはちょうどあなたがコードを実行したいかのようである:
f = [1, 2, 3]
f = 7
print f
あなただけを取得します。リストは失われます。
ありがとうございました。 – user21312
なぜ最初の関数を実行すると思いますか? – user2357112
'def f(x)...'はこの場合 'f = lambda x:100'と等価です(より複雑な関数ではこれは成り立ちません) – TemporalWolf
関数定義は何らかの代入をしません - ' f'他の変数と同じです。最初に 'f'を' 100'を返す関数に代入した後、 'f'を別の関数に代入して' f'を呼び出します。あなたが定義したラムダ関数ですので、それを呼び出すでしょう –