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の場合、処理の順番は次のようになります。
-
aに1を代入
-
resultに「a(=1)を使った条件式に応じて'even''add'のどちらか」を代入
-
resultを出力する('odd')
-
aに2を代入
-
resultに「a(=2)を使った条件式に応じて'even''add'のどちらか」を代入
-
resultを出力する('even')
2.と5.で使うaの値が違うため、結果的にresultに代入される値も異なるのです。
以上、長文になりましたが、ご参考になれば幸いです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/07 14:37
2019/04/07 14:48