Pythonでは「変数」が理解できると、一気にコードが書きやすくなります。
値に名前を付けて扱えるようになることで、計算結果を保存したり、入力内容を再利用したりといった処理が簡単になります。
本記事では、変数の基本から命名規則、型変換までを一通り学べるように、イメージ図とサンプルコードを交えながら丁寧に解説します。
Pythonの変数とは?基本概念と特徴
変数とは?値を入れる「名前付きの箱」

変数とは、値に名前を付けてプログラム中で扱いやすくするための仕組みです。
よく「値を入れる箱」と説明されますが、Pythonでは少し正確に言うと「値そのものではなく、値への参照(アドレス)に名前を付けたラベル」のような役割を果たします。
たとえば、次のように書きます。
x = 10 # xという変数に10という値を代入
name = "Taro" # nameという変数に文字列"Taro"を代入
is_ok = True # is_okという変数に真偽値Trueを代入
このように、変数名と代入演算子=、右側の値を書くだけで、後からxやnameを使ってその値にアクセスできます。
プログラム内で繰り返し使いたい値や、計算結果を保存しておくために欠かせない仕組みです。
Pythonの変数の特徴

Pythonの変数には、他の言語と比べて特徴的なポイントがいくつかあります。
1つ目は、変数の型をあらかじめ宣言する必要がないことです。
C言語などではint x;のように「型」を最初に宣言しますが、Pythonではいきなりx = 10と書けます。
2つ目は、同じ変数名に別の型の値を代入し直せることです。
例えば、次のようなコードもエラーになりません。
value = 10 # 整数を代入
value = "hello" # 後から文字列を代入(上書き)
このように、Pythonは「動的型付け言語」と呼ばれ、変数にどの型の値が入っているかは「実際に代入されている値」によって決まります。
3つ目は、変数は値そのものではなく、値が格納されている場所を指し示す“ラベル”的な存在だということです。
この特徴は、次の「変数とメモリの関係」で詳しく見ていきます。
変数とメモリの関係

Pythonでは、値はメモリと呼ばれる領域に保存され、変数はその値が置かれている場所を指す「ラベル」です。
例えば、次のようなコードを考えます。
x = 10
y = x
このとき、メモリの中には「10」という値が格納されており、xとyはどちらも同じ「10」という値を指しています。
値そのものがコピーされるというよりは、「同じ値を指すラベルが2つある」イメージです。
ただし、リストや辞書などの「変更可能なオブジェクト」の場合は、この性質が思わぬバグの原因になることがあります。
本記事では主に変数の基本に集中しますが、「変数は箱そのものではなく、箱にラベルを貼っているイメージ」という点を覚えておくと、後でリストなどを学ぶときに理解しやすくなります。
Python変数の宣言と使い方の基本
変数の宣言と代入の書き方

Pythonで変数を使うときは、「変数名 = 値」という形で代入します。
特別な「宣言文」はなく、最初の代入がそのまま宣言の役割も果たします。
age = 20 # 年齢を表す変数
price = 980.5 # 価格(小数)を表す変数
message = "Hello" # メッセージを表す変数
ここで使っている=は「イコール」ではありますが、数学の「左右が等しい」という意味ではなく、右辺の値を左辺の変数に代入するという意味です。
数値・文字列・真偽値の変数の例

Pythonでよく使う基本的な変数の例を見てみましょう。
# 数値型の例
count = 10 # 整数(int)
temperature = 36.5 # 小数(float)
# 文字列型の例
greeting = "こんにちは"
language = 'Python' # シングルクォートでもOK
# 真偽値の例
is_active = True # 有効かどうか
is_error = False # エラーかどうか
Pythonでは、整数はint型、小数はfloat型、文字列はstr型、真偽値はbool型として扱われます。
変数に代入した時点で、自動的に適切な型が割り当てられます。
代入演算子(=)と複数代入の書き方

代入演算子=は、左辺の変数に右辺の値を代入するために使いますが、Pythonでは一度に複数の変数へ値を代入する「複数代入」という便利な機能があります。
# 通常の代入
x = 1
y = 2
# 複数代入(タプルのアンパック)
a, b = 10, 20
print(x, y)
print(a, b)
1 2
10 20
このようにa, b = 10, 20と書くことで、10がaに、20がbに一度に代入されます。
また、値の入れ替えも簡単にできます。
x = 1
y = 2
# xとyの中身を入れ替える
x, y = y, x
print(x, y)
2 1
一時的な変数を使わずに値を交換できるのは、Pythonならではの書きやすさです。
定数として扱う変数(大文字名)の慣習

Pythonには、C言語のように「絶対に変更できない定数」を定義する仕組みはありません。
しかし、「この値は途中で変更しません」という意味を表すために、大文字の変数名を使う慣習があります。
TAX_RATE = 0.1 # 消費税率
MAX_USERS = 100 # ユーザーの最大数
PI = 3.14159 # 円周率
このような変数は、プログラムの途中で書き換えない前提で扱います。
ただし、Python自体が変更を禁止しているわけではないので、うっかり代入し直してしまってもエラーにはなりません。
あくまで「大文字名 = 定数として扱う」という開発者同士の約束事です。
Python変数の命名規則とベストプラクティス
Pythonの変数名のルール

Pythonの変数名には、いくつかの基本ルールがあります。
- 先頭に使える文字は、英字(A~Z, a~z)かアンダースコア
_のみです。 - 2文字目以降は、英字・数字・アンダースコアを使えます。
- 大文字と小文字は区別されます(
ageとAgeは別の変数)。 - 空白(スペース)やハイフン
-、記号などは使えません。 - 予約語(後述)は変数名として使えません。
代表的な例を表にまとめます。
| 種類 | 例 | 説明 |
|---|---|---|
| 使用できる例 | age | 小文字のみ |
| 使用できる例 | user_name | アンダースコアを含む |
| 使用できる例 | price1 | 数字を末尾に含む |
| 使用できない例 | 1st_value | 先頭が数字のためNG |
| 使用できない例 | user-name | ハイフンを含むためNG |
| 使用できない例 | class | 予約語のためNG |
予約語(キーワード)を変数名に使わない

Pythonには、文法上特別な意味を持つ「予約語(キーワード)」があります。
これらは既に言語としての役割が決まっているため、変数名として使うことはできません。
代表的な予約語をいくつか挙げます。
| 予約語の例 |
|---|
False, True, None |
and, or, not |
if, elif, else |
for, while, break, continue |
class, def, return |
import, from, as |
実際に予約語を変数名に使おうとすると、構文エラーになります。
# これはエラーになる例
def = 10 # defは関数定義に使う予約語
このコードを実行すると、Pythonが構文エラーとして教えてくれます。
予約語の一覧は、次のコードで確認できます。
import keyword
print(keyword.kwlist) # Pythonで定義されている予約語の一覧を表示
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', ...]
スネークケース(snake_case)の書き方

Pythonでは、変数名は基本的に「スネークケース(snake_case)」で書くのが慣習です。
スネークケースとは、英単語をすべて小文字で書き、単語と単語の間をアンダースコア_でつなぐスタイルのことです。
user_name = "Taro"
total_price = 1500
max_score = 100
これに対して、userNameのように2つ目以降の単語の先頭を大文字にするスタイルは「キャメルケース(camelCase)」と呼ばれますが、Pythonでは変数名にキャメルケースはあまり使いません。
「小文字 + アンダースコア」= 変数や関数というルールが、Pythonのスタイルガイド(PEP 8)で推奨されています。
わかりやすい変数名の付け方のコツ

変数名は、「自分や他人がコードを読んだときにすぐ意味がわかる」ことがとても重要です。
短すぎて意味が分からない名前や、あいまいな名前は避けましょう。
たとえば、次のような違いがあります。
| 悪い例 | 良い例 | 説明 |
|---|---|---|
a | price | 何を表すかが明確 |
b | tax_rate | 税率であることが伝わる |
c | total_price | 合計金額だとわかる |
また、「名前に型情報を埋め込まない」こともPythonでは一般的です。
例えば、str_nameやint_ageのように型を付けるよりも、nameやageのように「何を表すか」に集中した名前の方が読みやすくなります。
同じプロジェクト内で命名ルールを統一することも、読みやすさの大きなポイントです。
グローバル変数とローカル変数の使い分け

Pythonでは、変数が「どこから見えるか」を表す「スコープ(有効範囲)」という概念があります。
代表的なのは次の2つです。
- グローバル変数: ファイル(モジュール)全体で参照できる変数
- ローカル変数: 関数の中だけで使える変数
# グローバル変数
message = "Hello"
def greet():
# ローカル変数
name = "Taro"
print(message, name) # グローバル変数も参照できる
greet()
# print(name) # これはエラー(関数の外からはnameが見えない)
Hello Taro
グローバル変数は便利な反面、どこからでも書き換えられてしまうため、予期せぬバグの原因になりやすいです。
そのため、次のような使い分けを意識するとよいです。
- 基本的には、関数の引数や戻り値を使い、ローカル変数で処理を完結させる
- 本当に全体で共有したい定数的な値(TAX_RATEなど)のみ、グローバル変数として定義する
Pythonの型と型変換の基本
Pythonの主なデータ型

Pythonの変数には、いろいろな「型」の値を代入できます。
代表的なものを挙げると、次のようになります。
| 分類 | 型名 | 例 |
|---|---|---|
| 数値型 | int | 0, -5, 100 |
| 数値型 | float | 3.14, -0.5 |
| 文字列型 | str | "Hello", "こんにちは" |
| 真偽値型 | bool | True, False |
| コンテナ型 | list | [1, 2, 3] |
| コンテナ型 | dict | {"name": "Taro"} |
Pythonでは、すべての値は「オブジェクト」として扱われ、そのオブジェクトがどの型かをPythonが内部で管理しています。
変数には、どの型のオブジェクトを代入しても構いません。
暗黙の型変換と明示的な型変換の違い

型変換には、暗黙の型変換と明示的な型変換の2種類があります。
暗黙の型変換は、Pythonが自動的に行う型変換です。
例えば、整数と小数を足し算すると、小数に自動的に変換されます。
x = 10 # int
y = 2.5 # float
result = x + y # int + float → floatに自動変換
print(result)
print(type(result))
12.5
<class 'float'>
一方、明示的な型変換は、開発者が意図してint()やstr()などの関数を使って変換する方法です。
x = "10" # 文字列
y = int(x) # int型に明示的に変換
print(x, type(x))
print(y, type(y))
10 <class 'str'>
10 <class 'int'>
文字列と数値の足し算のように、Pythonが安全に自動変換できない場合は、必ず明示的な型変換が必要になります。
int・float・str間の型変換の書き方

数値や文字列の間でよく使う型変換は、次の関数で行います。
- 整数に変換:
int(値) - 小数に変換:
float(値) - 文字列に変換:
str(値)
具体的なサンプルを見てみましょう。
# int → float
x = 10
x_float = float(x)
print(x_float, type(x_float))
# float → int(小数部分は切り捨て)
y = 3.99
y_int = int(y)
print(y_int, type(y_int))
# int → str
age = 20
age_str = str(age)
print(age_str, type(age_str))
# str → int
num_str = "100"
num_int = int(num_str)
print(num_int, type(num_int))
10.0 <class 'float'>
3 <class 'int'>
20 <class 'str'>
100 <class 'int'>
文字列から数値へ変換するときは、その文字列が数字として解釈できる必要があります。
例えば、"10"はint("10")で変換できますが、"10円"や"abc"はエラーになります。
input関数と型変換

ユーザーからキーボード入力を受け取るinput()関数は、必ず文字列型(str)を返すという性質があります。
そのため、数値として扱いたい場合は、明示的に型変換が必要です。
# 年齢を入力してもらい、整数に変換してから計算する例
age_str = input("あなたの年齢を入力してください: ") # 戻り値はstr型
print("入力された型:", type(age_str))
# 文字列を整数に変換
age = int(age_str)
next_year_age = age + 1
print("来年の年齢は", next_year_age, "歳です。")
あなたの年齢を入力してください: 20
入力された型: <class 'str'>
来年の年齢は 21 歳です。
inputの戻り値はいつも文字列というルールを覚えておけば、TypeErrorなどのエラーを避けられます。
数値入力を扱うときは、int()やfloat()での変換をセットで書く癖を付けるとよいです。
型の確認に使うtype関数・isinstance関数

変数にどのような型の値が入っているかを確認したいときは、type()関数やisinstance()関数を使います。
x = 10
y = 3.14
z = "hello"
print(type(x))
print(type(y))
print(type(z))
<class 'int'>
<class 'float'>
<class 'str'>
type()は「その値の型オブジェクト」を返してくれます。
一方で、isinstance()は、ある値が特定の型に属しているかどうかをTrue/Falseで判定します。
value = 10
print(isinstance(value, int)) # valueはint型か?
print(isinstance(value, float)) # valueはfloat型か?
print(isinstance(value, (int, float))) # intまたはfloat型か?
True
False
True
isinstance()は「複数の型のどれかに当てはまるか」をまとめてチェックできるため、入力値のチェックや、引数の確認などでよく使われます。
まとめ
Pythonの変数は、値に名前を付けて扱うための「名前付きのラベル」です。
型を事前に宣言せず、変数名 = 値と書くだけで使い始めることができ、後から別の型の値を代入することも可能です。
スネークケースや予約語の禁止といった命名規則を守り、意味のわかる名前を付けることで、読みやすく保守しやすいコードになります。
また、型変換とinput()の戻り値が文字列であることを理解しておくと、実用的なプログラムがスムーズに書けます。
今回の内容を押さえれば、Pythonの基礎となる変数周りはしっかりとマスターできています。
