| この記事の要点 |
|
Python の演算子一覧
Python の演算子は次の 7 系統に分けて覚えると整理しやすくなります。各系統の詳細は子記事にまとめています。
| 系統 | 演算子 | 詳細 |
|---|---|---|
| 算術 | + - * / // % ** | 算術演算子 |
| 文字列 | +(連結)*(反復) | 文字列演算子 |
| 代入 | = と複合代入、:= | 代入演算子 |
| 比較 | == != < <= > >= | 比較演算子 |
| 論理 | and or not | 論理演算子 |
| ビット | & | ^ ~ << >> | ビット演算子 |
| メンバーシップ / 同一性 | in / not in、is / is not | この記事の後半 |
他の言語から来た人がつまずく 3 点
1. / は必ず float を返す
Python 3 では、整数どうしの割り算でも結果は float になります。整数で欲しいときは // を使います。
print(7 / 2) # 3.5 ← int どうしでも float
print(7 // 2) # 3 ← 切り捨て除算
print(7 % 2) # 1
print(2 ** 10) # 1024 ← べき乗は ** (^ ではない)
^ はべき乗ではなくビット XOR です。2 ^ 10 は 8 になります。
2. and / or は bool を返さない
短絡評価で「評価を打ち切った側のオペランド」がそのまま返ります。
print(0 or "default") # default ← 0 が偽なので右側
print("a" or "b") # a ← 左が真なら左を返す
print(1 and 2) # 2
print(bool(1 and 2)) # True ← bool が欲しいなら明示的に
3. 比較は連鎖できる
x = 5
print(0 <= x < 10) # True ← (0 <= x) and (x < 10) と同じ
print(1 < 2 < 3 < 4) # True
メンバーシップ演算子(in / not in)
print("py" in "python") # True 文字列は部分一致
print(3 in [1, 2, 3]) # True
print("k" in {"k": 1}) # True 辞書はキーを見る
print(5 not in {1, 2, 3}) # True
list の in は先頭から線形探索するため、要素数が多いなら set か dict にすると平均 O(1) になります。
同一性演算子(is / is not)
== が値が等しいかを見るのに対し、is は同じオブジェクトかを見ます。
a = [1, 2, 3]
b = [1, 2, 3]
print(a == b) # True 中身は同じ
print(a is b) # False 別オブジェクト
x = None
print(x is None) # True ← None の判定はこれが正しい
print(x == None) # True だが非推奨(__eq__ を上書きされると壊れる)
小さい整数や短い文字列は処理系がキャッシュしているため is が偶然 True になることがあります。値の比較に is を使ってはいけません。
優先順位
強い順に、おおまかに次のとおりです。迷ったら括弧を付けるのが確実です。
| 優先度 | 演算子 |
|---|---|
| 高 | ** |
+x -x ~x(単項) | |
* / // % | |
+ - | |
<< >> → & → ^ → | | |
比較 / in / is | |
not → and → or | |
| 低 | if - else(条件式)、lambda |
** だけは右結合です。2 ** 3 ** 2 は 2 ** (3 ** 2) = 512 になります。
演算子は自分のクラスでも定義できる
class Vec:
def __init__(self, x, y):
self.x, self.y = x, y
def __add__(self, other): # + の振る舞い
return Vec(self.x + other.x, self.y + other.y)
def __eq__(self, other): # == の振る舞い
return (self.x, self.y) == (other.x, other.y)
def __repr__(self):
return f"Vec({self.x}, {self.y})"
print(Vec(1, 2) + Vec(3, 4)) # Vec(4, 6)
関連
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスのソフト一覧|Blender・Metasequoiaと用途別の選び方
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Visual Studio「デザイナーを表示できません」エラーの原因と対処 2026-10-28 12:06:00
- SSH 認証に失敗しました。再試行してください の対処 2026-10-28 12:06:00
- SSH2 秘密鍵の読み込みに失敗しました の原因と対処 2026-10-28 12:06:00
- TeraTerm のよくあるエラーと対処法完全ガイド — Connection refused / 2026-10-28 12:06:00
- Visual Studio エラー一覧|コンパイルエラー・警告の確認方法と対処 2026-10-28 11:39:57
- Whitelabel Error Page の原因と消し方|Spring Boot のエラーページ 2026-10-28 11:39:57
- Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法 2026-10-28 11:39:57
- SQL WHERE 句完全ガイド 2026-10-28 11:39:57
- SQL JOIN 完全ガイド (INNER/LEFT/RIGHT/FULL OUTER) 2026-10-28 11:39:57
- tomcat の起動 / 停止ログと catalina.log・catalina.out の違い 2026-10-28 10:24:23
- Tomcat の起動確認方法 5 つ|localhost:8080・ポート・プロセス・ログ 2026-10-28 10:24:23
- Oracle 19c COMMITの使い方: 暗黙コミット・自動確定・応答不明時の確認 2026-10-28 09:59:09
- Oracle 19c DELETE文|削除対象の確認・COMMIT前の判断・ROLLBACKの条件 2026-10-28 09:59:09
- Oracle 19c INSERT文|INSERT ALL・SELECT・RETURNINGとMERGEの使い分け 2026-10-28 09:59:09
- Oracle 19cのトランザクション制御|COMMIT・ROLLBACK・分離レベルと接続設定 2026-10-28 09:59:09