質問: lambda a, b=1: a + b print(add_def(3, 4)) ``` また、例1の文のa=2の後にresultの式を書かないとresultの結果が上書きされないのはなぜでしょうか?
回答: > > if文を一行に書く方法で下記のコードのresultに例1のif文や例2のlambda式を代入しているのですが、なぜ代入できるのでしょうか? > > > 結論から言うと、**式の結果が値を持っているから代入できる**、という回答になります。 例1のif文は**「三項演算子」**と呼ばれるもので、文ではなく式扱いとなります。 式であり値を持つ(2とか’文字’と同じ)ため、変数に代入できるのです。 result=1+2 が成り立つのをイメージしてもらえばわかりやすいかと思います(「+」も演算子の仲間) 例1の場合は、条件式(a%2==0)に応じて値(’even’もしくは'odd')を決定しています。 例2のlambda式は「無名関数」と呼ばれ、関数内で処理した結果(値)を返しています。 問題にあるコードの場合、a+bの結果となる値を返しており、下のコードと等価になります。 ``` def add_lambda(a,b=1): return a+b ``` > > また、例1の文のa=2の後にresultの式を書かないとresultの結果が上書きされないのはなぜでしょうか? > > > 基本的にプログラミング言語は、**上から下へ順番に処理を行います**。 変数の値を変えたからといって、関連する変数が自動的に更新されるわけではありません。 例1の場合、処理の順番は次のようになります。 1. aに1を代入 2. resultに「**a(=1)を使った条件式**に応じて'even''add'のどちらか」を代入 3. resultを出力する('odd') 4. aに2を代入 5. resultに「**a(=2)を使った条件式**に応じて'even''add'のどちらか」を代入 6. resultを出力する('even') **2.と5.で使うaの値が違うため、結果的にresultに代入される値も異なる**のです。 以上、長文になりましたが、ご参考になれば幸いです。