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 以降を使っている場合、代入式を活用することで、より効率的なコードを書くことができるでしょう。