Pythonを学習していて、ふとこんなコードに出会ったときに「え、どこからどう計算されるの?」と混乱した経験がありました。
3 + 2 > 4 and not False
これは演算子の優先順位(precedence)が関係しています。
この記事では、まずざっくり押さえておくべきポイントと、詳しい優先順位の表を整理してみました。
簡単に覚えるポイント(超ざっくり)
数値演算子 > 比較演算子 > 論理演算子(not > and > or)
-
+
,-
,*
,/
など → 数値の計算系は最優先 -
>
,==
,!=
など → 値を比較する演算子がその次 -
not
,and
,or
→ 論理判断系は最後
演算子の優先順位(詳細)
以下は、優先順位が高い順に並べた表です。
全部を暗記する必要はありませんが、よく使うものから少しずつ慣れていきましょう。
優先度 | 演算子 | 説明 | 例 |
---|---|---|---|
1 | () |
丸括弧(グループ化) |
(3 + 2) * 4 → 20
|
2 | ** |
べき乗(指数) |
2 ** 3 → 8
|
3 |
+x , -x , ~x
|
単項演算子 |
-5 , ~2
|
4 |
* , / , // , %
|
掛け算、割り算、切り捨て、余り |
10 / 3 , 10 % 3
|
5 |
+ , -
|
足し算、引き算 |
5 + 2 - 1 → 6
|
6 |
<< , >>
|
ビットシフト |
1 << 2 → 4
|
7 | & |
ビットAND |
5 & 3 → 1
|
8 | ^ |
ビットXOR |
5 ^ 3 → 6
|
9 | ` | ` | ビットOR |
10 | 比較演算子 |
== , != , > , < , <= 等 |
3 < 5 → True
|
11 |
is , in
|
同一性・所属判定 |
x is y , "a" in "abc"
|
12 | not |
論理否定 |
not True → False
|
13 | and |
論理積(AND) |
True and False → False
|
14 | or |
論理和(OR) |
True or False → True
|
15 | if ~ else |
条件式(三項演算子) | x if cond else y |
16 | lambda |
無名関数 | lambda x: x + 1 |
17 |
= , += , -= など |
代入演算子 |
x = 5 , x += 2
|
実際の例で確認してみよう
次の式を一つ一つの優先順位で見ていきます。
result = 3 + 2 > 4 and not False
評価の流れ:
-
3 + 2
→5
(加算) -
5 > 4
→True
(比較) -
not False
→True
(論理否定) -
True and True
→True
(論理積)
結果:
print(result) # True
補足:右結合と左結合って何?
演算子には「どちらから結合されるか」というルールがあります。
-
右結合:右から処理される
2 ** 3 ** 2 # → 2 ** (3 ** 2) → 512
-
左結合:左から順に処理される(多くの演算子はこちら)
3 - 2 + 1 # → (3 - 2) + 1 → 2
まとめ
- 複雑な式では、演算子の優先順位を理解しておくことが重要
- 基本は「数値 > 比較 > 論理」とざっくり覚えるだけでも違う
-
迷ったときは丸括弧
()
を使って明示すると安全
演算子の評価順序は、コードの挙動に直結する大事なルールなので、
今後もコードを書きながら自然に理解を深めていきたいと思います。
参考:公式ドキュメント