| この記事の要点 |
|
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 / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- プロジェクトをTomcatプロジェクトとして認識させる方法 2026-10-07 22:32:50
- MySQLの1366 Incorrect string value|Laravelの文字コード・絵文字エラー 2026-10-07 21:54:03
- curlの証明書ホスト名不一致|旧エラー51・現行60の確認と対処 2026-10-07 21:54:03
- LaravelのMassAssignmentException|fillableの原因と安全な対処 2026-10-07 21:54:03
- Eclipse で Tomcat の起動ログがコンソールに出ない時の確認手順 2026-10-07 21:54:02
- MySQLにおける中央値(Median)の導き方(バージョン8未満) 2026-10-07 13:49:45
- getInputForward 2026-10-07 13:41:15
- JSONから配列に変換 2026-10-07 13:41:15
- ビューから値をモデルに格納しコントローラーで受け取る方法 2026-10-07 13:23:41
- Laravelのテーブル作成と定義変更|マイグレーション・up/down・注意点 2026-10-07 13:23:41
- NumPy 配列に要素を追加する方法 (append / concatenate) 2026-10-07 13:23:41
- MariaDB・MySQLで現在日時を取得する方法|NOW・タイムゾーン・保存型 2026-10-07 13:13:36
- 【django】テンプレートで定数を使用する方法 2026-10-07 13:10:15
- Spring BootにおけるApplication.propertiesの環境依存設定の分割方法 2026-10-07 12:09:35
- Not supported for DML operations【Springエラー】 2026-10-07 11:09:38