Pythonの変数の使い方: 順を追って学ぶ代入と命名規則

プログラムで値を扱う最初の一歩が「変数」です。

Pythonでは型の宣言が不要で、やさしく始められる一方で、代入のルールや命名のスタイルを正しく理解しないと、思わぬエラーや読みづらいコードにつながります。

この記事では、変数の基本から代入の書き方、命名規則、つまずきやすいエラーまでを順に丁寧に解説します。

ステップ1: Pythonの変数の基本

変数の役割(値に名前を付ける)

変数は、値にわかりやすい名前を付けて再利用しやすくするための仕組みです。

値そのものを毎回直接書くのではなく、意味のある名前にひも付けることで、読みやすさと変更のしやすさが大幅に向上します。

Python
# 値に名前を付けることで、何を表すのかが明確になります
message = "Python"
version = 3

print("message =", message)  # 変数名を通じて値を参照する
print("version =", version)
実行結果
message = Python
version = 3

補足: 「箱」のたとえとPythonの実際

変数を「箱」として説明することがありますが、Pythonでは「名前がオブジェクトにひも付く」イメージがより正確です。

同じ値でも、再代入すると別のオブジェクトに名前が結び直されることがあります。

はじめのうちは「値にラベルを貼る」感覚で捉えて大丈夫です。

動的型付け(型の宣言は不要)

Pythonは動的型付けの言語です。

intstrのような型を事前に宣言しなくても、代入した値に応じて自動的に型が決まります。

同じ変数名に、後から別の型の値を入れ直すこともできます。

Python
# 最初は整数が入っている
x = 10
print(type(x))  # 型を確認する

# 別の型の値に差し替えることができる
x = "ten"
print(type(x))
実行結果
<class 'int'>
<class 'str'>

注意点

動的型付けは柔軟ですが、思わぬ型の混在を招くこともあります。

同じ変数名に別の型を入れ直す時は、後で読む人に意図が伝わるかを意識しましょう。

型ヒントx: int = 10のような書き方もありますが、機能として必須ではありません。

ステップ2: 代入の使い方(=)を順に学ぶ

単純な代入と再代入

=は「右辺の値を左辺の名前に結び付ける」演算子です。

同じ名前に再び代入すれば、値を更新できます。

Python
# 単純な代入
count = 1
print("count =", count)

# 再代入で値を上書き
count = 2
print("count =", count)

# 既存の値を使って更新することもあります
# 計算の詳細は別の記事で扱いますが、ここでは再代入の例として扱います
count = count + 1
print("count =", count)
実行結果
count = 1
count = 2
count = 3

ポイント

  • 代入は必ず「右から左」へ評価されます。
  • 代入は式ではなく文です。x = y = 0のような連鎖代入は可能ですが、可読性に注意しましょう。

複数代入とアンパック

Pythonでは複数の名前に同時に値を割り当てたり、リストやタプルから値を取り出す「アンパック」ができます。

コードが簡潔で意図が明確になります。

Python
# 複数代入: 右辺をタプルのように並べて左辺に対応づける
a, b = 1, 2
print(a, b)

# アンパック: シーケンスから取り出す
x, y, z = [10, 20, 30]
print(x, y, z)

# スターアンパック: 可変個を受け取る
head, *middle, tail = [1, 2, 3, 4, 5]
print(head, middle, tail)

# 使わない値はアンダースコアで受ける慣習があります
name, _ = ("Taro", "unused")
print(name)
実行結果
1 2
10 20 30
1 [2, 3, 4] 5
Taro

よくある間違い

アンパックでは、左辺の数と右辺の要素数が合わないとエラーになります。

Python
# 要素数が多すぎる例
a, b = [1, 2, 3]
実行結果
ValueError: too many values to unpack (expected 2)

値の入れ替え(同時代入)

一時変数を使わずに、2つの変数の値を入れ替えられます。

Pythonならではの読みやすい書き方です。

Python
a = 1
b = 99
print("before: a =", a, ", b =", b)

# 同時代入で入れ替え
a, b = b, a
print("after:  a =", a, ", b =", b)
実行結果
before: a = 1 , b = 99
after:  a = 99 , b = 1

補足

この書き方は内部でタプルのパックとアンパックが行われています。

読み手に意図が一目で伝わるため、Pythonでは標準的な手法です。

ステップ3: 変数の命名規則とスタイル(PEP 8)

有効な変数名の条件

Pythonの変数名は、以下の文字の組み合わせで作ります。

  • 英字またはアンダースコア_で始める
  • 2文字目以降は英字、数字、アンダースコアを使える
  • 予約語は使えない
  • PythonはUnicodeをサポートするため日本語も使えますが、一般には避けるのが無難です

例と可否一覧

名前の例可否理由
name先頭が英字で有効
_temp先頭のアンダースコアは有効
age2数字は先頭以外なら可
2nd不可先頭が数字
user-name不可ハイフンは演算子として解釈される
class不可予約語
名前可だが非推奨Unicodeは可。ただし共有やツールの互換性のためASCIIが無難

snake_caseと定数(UPPER_CASE)

PEP 8は、変数名にsnake_caseを推奨します。

定数はすべて大文字のUPPER_CASEで表します。

Pythonには真の定数機構はありませんが、名前の付け方で「変更しない意図」を伝えます。

Python
# 変数はsnake_caseで
max_speed = 80
user_count = 0

# 定数はUPPER_CASEで
MAX_RETRIES = 3
SERVER_URL = "https://example.com"

# 先頭アンダースコアは「内部用」の目印として使われます
_internal_cache = {}

理由

  • 一貫したスタイルは読みやすさと検索のしやすさに直結します。
  • 定数をUPPER_CASEにすると、設定値や変更すべきでない値がひと目でわかります。

予約語と避けたい組み込み名

予約語はPythonの文法で使われるキーワードで、変数名にはできません。

また、liststrのような組み込み名を変数で上書きすると、標準の機能が使えなくなります。

予約語とは

Python
# 予約語に含まれるかを確認する簡単な例
import keyword
print("class" in keyword.kwlist)
print("for" in keyword.kwlist)
print("lambda" in keyword.kwlist)
実行結果
True
True
True
変数名に使えない予約語一覧
Falseawaitelseimport
Nonebreakexceptin
Trueclassfinallyis
andcontinueforlambda
asdeffromnonlocal
assertdelglobalnot
asyncelififor
passraisereturntry
whilewithyield

変数名の大文字小文字は区別されるため、isだとIsISを変数名にすることは可能ですが、基本的に使うことはおすすめしません。

これらの予約語を含む変数名が適切な場面では、is_convertedなど、わかりやすい変数名にしましょう。

組み込み名を上書きするとどうなるか

Python
# 組み込みのlistという型名を上書きしてしまう例
list = [1, 2, 3]        # これは単なる変数代入。以降、listは「変数」になる
print(list)

# 本来のlist()コンストラクタを呼びたくても、もう呼べない
letters = list('abc')   # ここでエラー
実行結果
[1, 2, 3]
TypeError: 'list' object is not callable

上書きしてしまった場合は、その変数名をdel listで削除するか、スクリプトを再実行して環境をリセットしてください。

最初からlstなど別名を使うと安全です。

ステップ4: 初心者がつまずく変数のエラーと対処

NameError(定義前の参照)

変数に値を代入する前に参照するとNameErrorになります。

発生例

Python
# まだtotalに値を入れていないのに参照している
print(total)
実行結果
NameError: name 'total' is not defined

対処

Python
# 先に値を代入してから使う
total = 0
print(total)
実行結果
0

SyntaxError(無効な変数名・代入ミス)

文法に合わない変数名や記号を使うと、実行以前に構文エラーになります。

無効な変数名

Python
# 先頭が数字
2nd = 1
実行結果
SyntaxError: invalid decimal literal
Python
# ハイフンは演算子として解釈される
user-name = "Alice"
実行結果
SyntaxError: cannot assign to expression here. Maybe you meant '=='?

代入ミスの例

Python
# === はPythonに存在しないため構文エラー
x === 1
実行結果
SyntaxError: invalid syntax
Python
# == は「比較」であって代入ではありません
x = 0
x == 1          # ここは比較しているだけ。結果は使われず、xの値は変わらない
print(x)
実行結果
0

大文字小文字や上書きに注意

Pythonの名前は大文字小文字を区別します。

また、同じ名前に再代入すると以前の値は失われます。

大文字小文字の違い

Python
age = 20
print(Age)  # 変数名はage。Ageは別物として扱われる
実行結果
NameError: name 'Age' is not defined

上書きの注意

Python
# 同じ名前に別の型を入れると、後続の処理が想定外になることがあります
text = "hello"
text = 123        # ここで文字列から整数に置き換わる
print(text)
実行結果
123

必要に応じて名前を変える、または用途ごとに別の変数名を用意すると安全です。

組み込み名の上書きは特に避けましょう(前述の例を参照)。

まとめ

変数は「値に名前を付ける」ための基本的な仕組みであり、Pythonでは動的型付けにより柔軟に扱えます。

代入は=で行い、複数代入やアンパックを活用すると簡潔かつ読みやすいコードになります。

命名はPEP 8に従ってsnake_caseUPPER_CASEを使い分け、予約語や組み込み名の上書きを避けるのが実務的なコツです。

最後に、NameErrorSyntaxError、大文字小文字の取り違え、意図しない上書きといった初歩的なミスは、定義の順序と命名の一貫性を意識することで多くを防げます。

まずはここで学んだ基礎を確実に身につけ、少しずつコード量を増やしながら慣れていきましょう。

クラウドSSLサイトシールは安心の証です。

URLをコピーしました!