Pythonでプログラムを書いていて、こんなコードをよく見かけませんか?
count = count + 1
total = total + price
message = message + "です"
実はこれ、もっと短く書けるって知っていましたか?
count += 1
total += price
message += "です"
このような書き方を**「演算子の短縮表現」**と呼びます。見た目がスッキリするだけでなく、処理も効率的に行える場面があります。
この記事では、Pythonにおける演算子の短縮表現(複合代入演算子)について、「何があるの?」「どう使うの?」「注意点は?」を初心者向けに分かりやすくまとめて解説します。
Pythonにおける演算子の短縮表現とは?

基本的な考え方
まず基本から確認しましょう。
通常の書き方:
x = x + 1 # xに1を足して、結果をxに代入
短縮表現(複合代入演算子):
x += 1 # 上記と同じ意味
このように、右辺の値を左辺の変数に加えたうえで再代入する処理を、一行にまとめることができます。
なぜ短縮表現を使うの?
メリット | 説明 | 例 |
---|---|---|
簡潔性 | コードが短くなる | x += 1 vs x = x + 1 |
可読性 | 意図が明確になる | 「xを増やす」という意味が伝わりやすい |
効率性 | 場合によっては処理が高速 | リストの場合など |
慣習性 | Python開発者の標準的な書き方 | プロっぽいコードに見える |
よく使われる短縮演算子一覧
算術演算の短縮表現
通常の書き方 | 短縮表現 | 意味 | 使用例 |
---|---|---|---|
x = x + 5 | x += 5 | 加算して代入 | カウンタ、合計計算 |
x = x - 3 | x -= 3 | 減算して代入 | 残高減少、在庫減少 |
x = x * 2 | x *= 2 | 掛け算して代入 | 2倍にする |
x = x / 2 | x /= 2 | 割り算して代入 | 半分にする |
x = x % 3 | x %= 3 | 剰余(あまり)代入 | 循環処理 |
x = x // 3 | x //= 3 | 整数除算して代入 | 整数で割る |
x = x ** 2 | x **= 2 | べき乗して代入 | 2乗する |
ビット演算の短縮表現(上級者向け)
通常の書き方 | 短縮表現 | 意味 |
---|---|---|
x = x & y | x &= y | ビットAND代入 |
x = x | y | x |= y | ビットOR代入 |
x = x ^ y | x ^= y | ビットXOR代入 |
具体例で理解しよう!短縮表現の使い方
数値の計算
# カウンタの例
count = 0
count += 1 # countは1になる
count += 5 # countは6になる
count -= 2 # countは4になる
count *= 3 # countは12になる
print(count) # 12
文字列の連結
# メッセージの作成
greeting = "こんにちは"
greeting += "、"
greeting += "田中さん"
greeting += "!"
print(greeting) # こんにちは、田中さん!
従来の書き方と比較:
# 従来の書き方(長い)
greeting = greeting + "、"
greeting = greeting + "田中さん"
greeting = greeting + "!"
# 短縮表現(スッキリ)
greeting += "、"
greeting += "田中さん"
greeting += "!"
リストの操作
# リストへの要素追加
fruits = ["りんご", "バナナ"]
fruits += ["オレンジ"] # 1つの要素を追加
fruits += ["ブドウ", "イチゴ"] # 複数の要素を追加
print(fruits) # ['りんご', 'バナナ', 'オレンジ', 'ブドウ', 'イチゴ']
実用的な例:ショッピングカート
# ショッピングカートの合計計算
total_price = 0
tax_rate = 0.1
# 商品を追加していく
total_price += 500 # 商品1: 500円
total_price += 1200 # 商品2: 1200円
total_price += 800 # 商品3: 800円
print(f"小計: {total_price}円") # 小計: 2500円
# 税込み価格を計算
total_price *= (1 + tax_rate)
print(f"税込み: {total_price}円") # 税込み: 2750.0円
重要な注意点

1. 「参照型」の挙動に注意(特にリスト)
注意が必要な例:
# リストの場合
original_list = [1, 2]
copy_list = original_list # 同じリストを参照
original_list += [3] # 元のリストを変更
print(copy_list) # [1, 2, 3] ← copy_listも変わる!
より安全な書き方:
original_list = [1, 2]
copy_list = original_list.copy() # コピーを作成
original_list += [3]
print(copy_list) # [1, 2] ← copy_listは変わらない
2. += と append() の違い(リスト)
# += を使う場合
list1 = [1, 2]
list1 += [3, 4]
print(list1) # [1, 2, 3, 4]
# append() を使う場合
list2 = [1, 2]
list2.append([3, 4]) # リスト全体が1つの要素として追加
print(list2) # [1, 2, [3, 4]]
3. 型の変化に注意
# 整数の除算
x = 5
x /= 2
print(x) # 2.5
print(type(x)) # <class 'float'> ← intからfloatに変化
# 整数のまま保ちたい場合
y = 5
y //= 2
print(y) # 2
print(type(y)) # <class 'int'> ← intのまま
実践的な活用パターン
パターン1:ループでの累積処理
# 1から10までの合計を計算
total = 0
for i in range(1, 11):
total += i
print(f"1から10までの合計: {total}") # 55
# 従来の書き方(推奨しない)
# total = total + i
パターン2:条件に応じたカウント
# テストの点数を集計
scores = [85, 92, 78, 96, 88, 73, 91]
excellent_count = 0 # 90点以上
good_count = 0 # 80-89点
fair_count = 0 # 70-79点
for score in scores:
if score >= 90:
excellent_count += 1
elif score >= 80:
good_count += 1
elif score >= 70:
fair_count += 1
print(f"優秀: {excellent_count}人") # 優秀: 3人
print(f"良好: {good_count}人") # 良好: 3人
print(f"普通: {fair_count}人") # 普通: 1人
パターン3:辞書での値の更新
# 文字の出現回数をカウント
text = "hello world"
char_count = {}
for char in text:
if char in char_count:
char_count[char] += 1 # 既にある場合は+1
else:
char_count[char] = 1 # 初回の場合は1
print(char_count)
# {'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1}
パターン4:文字列の動的生成
# HTMLタグの生成
html = "<div>"
html += "<h1>タイトル</h1>"
html += "<p>本文です。</p>"
html += "</div>"
print(html)
# <div><h1>タイトル</h1><p>本文です。</p></div>
より効率的な使い方のコツ
コツ1:適切な場面で使い分ける
短縮表現が向いている場面:
- ループ内での累積処理
- 文字列やリストの段階的な構築
- カウンタや状態変数の更新
通常の書き方が良い場面:
- 複雑な計算式がある場合
- 初心者が読むコード
- デバッグが必要な複雑な処理
コツ2:可読性を重視する
# ❌ 複雑すぎる例(避けたい)
result *= (value + calculate_something()) ** 2
# ⭕ 分かりやすい例(推奨)
temp = value + calculate_something()
result *= temp ** 2
コツ3:一貫性を保つ
# ❌ 一貫性がない例
total = total + price1
total += price2
total = total + price3
# ⭕ 一貫している例
total += price1
total += price2
total += price3
よくある間違いと対策

間違い1:文字列と数値の混在
# ❌ エラーになる例
message = "合計: "
message += 100 # TypeError: can only concatenate str (not "int") to str
# ⭕ 正しい例
message = "合計: "
message += str(100) # 文字列に変換
# または
message += f"{100}" # f-stringを使用
間違い2:リストの参照問題
# ❌ 予期しない動作
original = [1, 2, 3]
backup = original
original += [4]
print(backup) # [1, 2, 3, 4] ← backupも変わってしまう
# ⭕ 正しい例
original = [1, 2, 3]
backup = original.copy() # コピーを作成
original += [4]
print(backup) # [1, 2, 3] ← backupは変わらない
間違い3:演算子の優先順位
# ❌ 予期しない結果
x = 10
x *= 2 + 3 # x = x * (2 + 3) = 10 * 5 = 50
# ⭕ 意図を明確にする
x = 10
x *= (2 + 3) # 明示的に括弧を使用
# または段階的に計算
x = 10
temp = 2 + 3
x *= temp
まとめ:Pythonの短縮演算子でコードをもっとスマートに!
重要なポイント
+=
や*=
などの短縮演算子は、再代入を簡潔に書く方法- 数値、文字列、リストなど幅広いデータ型で使える
- 参照型の挙動や型の変化に注意が必要
- 「読みやすさ」と「簡潔さ」のバランスを意識することが大事
覚えておきたい短縮演算子ベスト5
順位 | 演算子 | 用途 | 頻度 |
---|---|---|---|
1 | += | 加算、文字列連結、リスト結合 | ★★★★★ |
2 | -= | 減算、カウントダウン | ★★★★☆ |
3 | *= | 乗算、繰り返し | ★★★☆☆ |
4 | /= | 除算 | ★★☆☆☆ |
5 | //= | 整数除算 | ★★☆☆☆ |
使いこなしのステップ
- 基本的な
+=
から始める:数値の累積、文字列の連結 - ループでの活用:for文、while文での累積処理
- データ型別の特徴を理解:リスト、辞書での挙動
- 注意点を覚える:参照問題、型変化
- 実践的なパターンを身につける:実際のプログラムで活用
コメント