Pythonには「代入演算子」と「代入式」という似た名前の機能がありますが、それぞれの役割や使い方が異なります。また、代入演算子(=)は「文」 であり、代入式(:=)は「式」 であるという重要な違いもあります。
この違いを理解することは、Python コードを正確に記述し、意図しないバグを防ぐために非常に重要です。本記事では、初心者にも分かりやすく、それぞれの特徴と使い方、さらに 「文」と「式」の本質的な違い を詳しく解説していきます。
代入演算子とは
代入演算子は、変数に値を入れるために使用する記号です。Pythonでは「=`」が基本の代入演算子です。
基本の代入
代入演算子「=`」を使って、右側の値を左側の変数に入れます。
x = 10
name = "Python"
x = 10: 変数xに数値10を代入しています。name = "Python": 変数nameに文字列"Python"を代入しています。
複合代入演算子
Pythonには、代入と計算を同時に行う複合代入演算子もあります。
x = 10
x += 5 # x = x + 5 と同じ
x -= 3 # x = x - 3 と同じ
x *= 2 # x = x * 2 と同じ
x /= 4 # x = x / 4 と同じ
x += 5:xに5を足した結果をxに代入します。x -= 3:xから3を引いた結果をxに代入します。
これらもすべて「文」として扱われ、式の一部にはできません。
タプル・リストのアンパッキング
複数の値を一度に代入することも可能です。
a, b = 1, 2
name, age = "Alice", 25
a, b = 1, 2:aに1、bに2を代入しています。name, age = "Alice", 25:nameに"Alice"、ageに25を代入しています。
また、リストやタプルのアンパッキングにも使用できます。
numbers = [10, 20, 30]
x, y, z = numbers
x,y,zに10,20,30がそれぞれ代入されます。
代入演算子(=)が「文」である理由
Pythonでは、代入演算子(=)は文として設計されています。
そのため、以下のように if 文や while 文の条件内で使用することはできません。
# エラー例
if (x = 10):
print("xは10です。")
x = 10は 文 なので、ifの条件内に書くことは できません。- この設計は、
=と==を間違えて書いてしまうバグを防ぐためでもあります。
代入式とは
Python 3.8 以降で導入された新しい構文が「代入式」です。
代入式は「:=(ウォルラス演算子)」を使って、式の中で 値を変数に代入できます。
式としての代入
代入式は「式(expression)」です。
式とは、値を返す構成要素のことです。
式は文の一部として使うことができ、他の式の中にも組み込めます。
if (n := len("Python")) > 5:
print(f"文字数は {n} です。")
n := len("Python"): 文字列"Python"の長さをnに代入しています。- 式 なので、この代入式全体が
nの値を返します。 nの値は6になるので、"文字数は 6 です。"と表示されます。
ループ内での活用
繰り返し処理の中でも、代入式は便利に使えます。
data = [1, 2, 3, 4, 5]
while (item := data.pop(0)) < 4:
print(item)
item := data.pop(0): リストの先頭から要素を取り出し、itemに代入しています。- 式 なので、そのまま
itemの値が評価され、while文の条件として使用できます。
リスト内包表記との併用
リスト内包表記でも使用可能です。
squares = [y for x in range(10) if (y := x * x) > 10]
print(squares)
y := x * x:xの2乗をyに代入しています。- 式 なので、
if文の条件としても使用できます。
代入演算子と代入式の違いまとめ
| 項目 | 代入演算子 (=) | 代入式 (:=) |
|---|---|---|
| 読み方 | イコール、イコールサイン | ウォルラス演算子 |
| 用途 | 変数への値の代入 | 式の中で値を代入し、再利用 |
| 種類 | 文(statement) | 式(expression) |
| 値を返すか | 返さない | 返す |
| 使用可能場所 | 単独の行、ブロック内 | 式の一部として使用可能 |
| 利用可能場所 | 文として使用 | if, while, 内包表記など |
| Pythonバージョン | 全バージョンで使用可能 | 3.8 以降 |
まとめ
- 代入演算子(
=) は「文」であり、式の中では使えない。 - 代入式(
:=) は「式」であり、式の中で使うことができる。 - 代入式を使うことで、コードの重複を減らし、読みやすくできる。
- ただし、使いすぎるとコードが複雑になるため、適切な場面での使用が推奨されます。
Python 3.8 以降を使っている場合、代入式を活用することで、より効率的なコードを書くことができるでしょう。

