Python 代入演算子と代入式の違い:文と式の本質を理解しよう

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: x5 を足した結果を x に代入します。
  • x -= 3: x から 3 を引いた結果を x に代入します。

これらもすべて「文」として扱われ、式の一部にはできません

タプル・リストのアンパッキング

複数の値を一度に代入することも可能です。

a, b = 1, 2
name, age = "Alice", 25
  • a, b = 1, 2: a1b2 を代入しています。
  • name, age = "Alice", 25: name"Alice"age25 を代入しています。

また、リストやタプルのアンパッキングにも使用できます。

numbers = [10, 20, 30]
x, y, z = numbers
  • x, y, z10, 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 以降を使っている場合、代入式を活用することで、より効率的なコードを書くことができるでしょう。