質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

616閲覧

Pythonのlambda式やif文の代入について

ass3891

総合スコア19

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/04/07 12:43

ここのサイトを見ていて、if文を一行に書く方法で下記のコードのresultに例1のif文や例2のlambda式を代入しているのですが、なぜ代入できるのでしょうか?

#例1 a=1 result ='even' if a%2==0 else 'add' print(result) a=2 result ='even' if a%2==0 else 'add' print(result)
#例2 add_lambda = lambda a, b=1: a + b print(add_def(3, 4))

また、例1の文のa=2の後にresultの式を書かないとresultの結果が上書きされないのはなぜでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

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に代入される値も異なるのです。

以上、長文になりましたが、ご参考になれば幸いです。

投稿2019/04/07 13:56

amahara_waya

総合スコア1029

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ass3891

2019/04/07 14:37

回答ありがとうございます。 式を丸々代入してるのだと勘違いしていました。 分かりやすい説明ありがとうございます
amahara_waya

2019/04/07 14:48

ご理解いただけたようで何よりです。
guest

0

なぜ代入できるのでしょうか?

'even' if a%2==0 else 'add'は式です。result = 式と書いているので、式の結果がresultに代入されます。result = 100で代入できるのと同じ事です。

lambda a, b=1: a + bについても同じく式です。

例1の文のa=2の後にresultの式を書かないとresultの結果が上書きされないのはなぜでしょうか?

上書きしないと上書きされないと言うことです。

投稿2019/04/07 13:03

otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ass3891

2019/04/07 14:39

回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問