Pythonにおいて次の式が True になる理由を教えてください。
1 < 3 < 5 == 5
< と == が同じ優先順位であるなら左から順に処理されて、
1 < 3 < 5 == 5 True == 5 False
となるのではないのでしょうか。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
比較はいくらでも連鎖することができます。例えば x < y <= z は x < y and y <= z と等価になります。ただしこの場合、前者では y はただ一度だけ評価される点が異なります (どちらの場合でも、 x < y が偽になると z の値はまったく評価されません)。
形式的には、 a, b, c, …, y, z が式で op1, op2, …, opN が比較演算子である場合、 a op1 b op2 c ... y opN z は a op1 b and b op2 c and ... y opN z と等価になります。
とのことなので、1 < 3 < 5 == 5
-> 1 < 3 and 3 < 5 and 5 == 5
-> True and True and True
-> True
になるのだと思います。
Python
1a = 1 < 3 < 5 == 5 2print(a) # True 3 4a = 1 < 3 5b = 3 < 5 6c = 5 == 5 7d = a and b and c 8print(a,b,c,d) # True True True True
投稿2018/07/03 12:10
総合スコア38266
0
ベストアンサー
disモジュールを使って少し簡単な例を解析してみると良いかと思います。
Python
1>>> import dis 2>>> dis.dis('1 < 5 == 5') 3 1 0 LOAD_CONST 0 (1) 4 2 LOAD_CONST 1 (5) 5 4 DUP_TOP 6 6 ROT_THREE 7 8 COMPARE_OP 0 (<) 8 10 JUMP_IF_FALSE_OR_POP 18 9 12 LOAD_CONST 1 (5) 10 14 COMPARE_OP 2 (==) 11 16 RETURN_VALUE 12 >> 18 ROT_TWO 13 20 POP_TOP 14 22 RETURN_VALUE
読み方についてはこちらが参考になります。
1 < 5
に対する評価と5 == 5
に対する評価は同列に下されていることが分かります。
命令 | スタック1 | スタック2 | スタック3 | |
---|---|---|---|---|
0 | LOAD_CONST | 1 | ||
2 | LOAD_CONST | 1 | 5 | |
4 | DUP_TOP | 1 | 5 | 5 |
6 | ROT_THREE | 5 | 1 | 5 |
8 | COMPARE_OP | 5 | True | |
10 | JUMP_IF_FALSE_OR_POP | 5 | ||
12 | LOAD_CONST | 5 | 5 | |
14 | COMPARE_OP | True | ||
16 | RETURN_VALUE |
投稿2018/07/03 12:00
編集2018/07/03 12:03総合スコア35660
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/03 12:14