Pythonにおける演算子の体系と実践的使い方

Pythonの演算子概観

Pythonでは、データ操作や条件制御、文字列処理など多様なタスクを支えるために、豊富な演算子が提供されています。以下に主要なカテゴリとその特徴を整理し、実用的なコード例とともに解説します。

論理演算子:and / or / not

Pythonの論理演算子は短絡評価(short-circuit evaluation)を採用しており、左から右へ順に評価され、結果が確定した時点で残りの式は評価されません。

# and の動作例:左辺が偽なら右辺は評価されない
result_a = 0 and "hello"  # → 0(int型の0はFalse相当)
result_b = 42 and "world" # → "world"(左辺がTrue相当なので右辺が返される)

# or の動作例:左辺が真なら右辺は評価されない
default_value = None or "fallback"  # → "fallback"
flag = True or expensive_function()   # expensive_function() は実行されない

連続比較も自然にサポートされます:

is_valid = 15 > 10 > 5  # 内部的には (15 > 10) and (10 > 5) と等価
print(is_valid)  # True

文字列フォーマット:旧式 % 表記

古くからあるが依然利用される % 演算子によるフォーマット。型指定子と値の対応は以下の通りです:

  • %s:任意のオブジェクト(str() で変換可能)
  • %d:整数(小数点以下は切り捨て)
  • %f:浮動小数点数(デフォルト6桁)
  • %.2f:小数点以下2桁(四捨五入)
# 位置指定方式
template1 = "名前:%s、年齢:%d、評価:%0.1f" % ("佐藤", 28, 4.67)
# → "名前:佐藤、年齢:28、評価:4.7"

# 名前指定方式(辞書展開)
template2 = "氏名:%(name)s、部署:%(dept)s" % {"name": "田中", "dept": "開発部"}
# → "氏名:田中、部署:開発部"

算術・比較・代入演算子

基本的な四則演算(+, -, *, /, //, %, **)、比較(==, !=, <, >, <=, >=)、複合代入(+=, -=, *=など)は他の言語と同様に動作します。

メンバーシップとアイデンティティ演算子

innot in はコレクション内での存在確認に使用します。

fruits = ["apple", "banana", "cherry"]
has_banana = "banana" in fruits  # True

is== の違いは重要です:

  • ==:値の等価性を判定(__eq__ メソッド呼び出し)
  • is:同一オブジェクト(メモリ上の同一アドレス)かを判定(id() の一致)
a = 100
b = 100
print(a == b)  # True
print(a is b)  # True(-5〜256の整数はインターン済み)

x = 1000
y = 1000
print(x == y)  # True
print(x is y)  # False(範囲外のため別オブジェクト)

ビット演算子

整数に対してビット単位の操作が可能です:&, |, ^, ~, <<, >>。たとえばフラグ管理や低レベル処理で活用されます。

演算子の優先順位

複雑な式では、暗黙の優先順位に依存せず、明示的な括弧によるグループ化を推奨します。一例として、以下の優先度順(高→低)があります:

  1. カッコ ()
  2. 指数 **
  3. 乗算・除算・剰余 *, /, //, %
  4. 加算・減算 +, -
  5. 比較・メンバーシップ・アイデンティティ ==, <, in, is など
  6. 論理 NOT not
  7. 論理 AND and
  8. 論理 OR or

詳細な優先順位表は公式ドキュメントや信頼できる学習リソースで確認できます。

タグ: Python operators string-formatting logical-operators bitwise-operators

5月19日 03:19 投稿