Pythonの変数の使い方入門:数値・文字列・データ型の基本とサンプルコード

Pythonの「変数」は、数値や文字列などの「値」を一時的に保存し、後で再利用するための基本要素です。

この記事では、初心者の方がつまずきやすいポイントを避けながら、宣言と代入、データ型の基本、命名規則、型変換、スコープまでをサンプルコード付きで丁寧に解説します。

Pythonの変数の基本:数値・文字列の「値を入れる箱」を理解

変数とは何かと使いどころ

変数とは、プログラム中で値を扱いやすくするために名前を付けて保存する「ラベル」のようなものです。

たとえば、商品の価格やユーザー名、計算結果などに意味のある名前を与えることで、コードの可読性や再利用性が高まります。

変数を使うことで、同じ値を何度も記述する必要がなくなり、変更にも強いプログラムになります。

動的型付け言語Pythonにおける変数の特徴

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

変数を宣言する際に型を明示する必要がなく、代入する値に応じて型が決まります。

また、同じ変数名に別の型の値を再代入することもできます。

これは柔軟で便利ですが、意図しない型の混在によるエラーを招く可能性があるため、型の確認や命名で意味を明確にすることが重要です。

変数の宣言と代入の書き方(サンプルコード付き)

代入演算子=と再代入の基本

Pythonでは=で値を代入します。

宣言と代入が同時に行われ、再代入も自由です。

Python
# 価格を表す変数に整数を代入
price = 1200
print(price)  # 1200

# 再代入で値を更新
price = price + 300
print(price)  # 1500

# 型を変えて再代入も可能(動的型付け)
price = "1500円"
print(price)  # '1500円'
実行結果
1200
1500
1500円

同時代入・アンパックで複数の値を設定

Pythonは複数代入(タプルアンパック)が簡潔に書けます。

入れ替えも一行で可能です。

Python
# 同時代入
x, y, z = 1, 2, 3
print(x, y, z)  # 1 2 3

# 値の入れ替え(テンポラリ変数不要)
a, b = 10, 20
a, b = b, a
print(a, b)  # 20 10

# シーケンスのアンパック
data = [100, 200, 300]
first, second, third = data
print(first, second, third)

# アンパックでの残余(スター式)
head, *middle, tail = [1, 2, 3, 4, 5]
print(head, middle, tail)
実行結果
1 2 3
20 10
100 200 300
1 [2, 3, 4] 5

type()で型を確認する方法

型が気になるときはtype()で確認します。

Python
n = 42           # int
pi = 3.14        # float
name = "Alice"   # str
flag = True      # bool
no_value = None  # NoneType

print(type(n), type(pi), type(name), type(flag), type(no_value))
実行結果
<class 'int'> <class 'float'> <class 'str'> <class 'bool'> <class 'NoneType'>

Pythonのデータ型の基本:int・float・str・bool・None

数値型(int/float)の使い方と四則演算

整数intと浮動小数点数floatは、四則演算や剰余、冪乗が利用できます。

除算/は常にfloat、切り捨て除算//は整数同士でintになります。

Python
a = 7
b = 3
print(a + b)   # 加算
print(a - b)   # 減算
print(a * b)   # 乗算
print(a / b)   # 除算(float)
print(a // b)  # 切り捨て除算(int)
print(a % b)   # 剰余
print(a ** b)  # 冪乗
実行結果
10
4
21
2.3333333333333335
2
1
343

浮動小数点の誤差

浮動小数点には丸め誤差があります。

必要に応じてdecimalモジュールを検討します。

Python
x = 0.1 + 0.2
print(x)            # 丸め誤差の例
print(abs(x - 0.3) < 1e-9)  # 許容誤差で比較
実行結果
0.30000000000000004
True

文字列(str)の基本操作とエスケープ

文字列は'...'または"..."で囲みます。

改行やクォートはエスケープします。

複数行は"""..."""が便利です。

Python
s = "Hello, \"Python\"!"   # ダブルクォートのエスケープ
t = 'It\'s fine.'          # シングルクォートのエスケープ
u = """複数行の
テキストです。"""
print(s)
print(t)
print(u)

# 連結と繰り返し
greet = "Hi" + " " + "there"
line = "-" * 10
print(greet)
print(line)

# スライスと長さ
text = "abcdef"
print(text[0], text[-1], text[1:4])
print(len(text))
実行結果
Hello, "Python"!
It's fine.
複数行の
テキストです。
Hi there
----------
a f bcd
6

真偽値(bool)とNoneの扱い

TrueFalseは条件分岐で使います。

Noneは「値がない」ことを表します。

Python
is_empty = (len("") == 0)
print(is_empty)  # True

value = None
if value is None:
    print("値は未設定です")

# 真偽値コンテキストでの評価(空はFalse)
print(bool(0), bool(""), bool([]), bool(123), bool("text"))
実行結果
True
値は未設定です
False False False True True

データ型ごとのサンプルコード

まとめとして、複数の型を扱う例を示します。

Python
age = 20              # int
height = 1.73         # float
name = "Sato"         # str
is_student = True     # bool
nickname = None       # NoneType

profile = f"{name}さんは{age}歳、身長{height}m、学生={is_student}"
print(profile)
print("ニックネーム未設定?", nickname is None)
実行結果
Satoさんは20歳、身長1.73m、学生=True
ニックネーム未設定? True

変数名の付け方とベストプラクティス(PEP 8準拠)

有効な識別子と禁止事項(予約語・記号)

変数名は英字、数字、アンダースコアで構成し、数字から始めてはいけません。

ハイフンやスペースは使えません。

さらに、forclassなどの予約語は使用不可です。

予約語はkeywordモジュールで確認できます。

Python
import keyword

print("予約語の一部:", keyword.kwlist[:10])  # 最初の10件だけ表示
# 有効な例
user_name = "taro"
value2 = 10

# 無効な例(コメントとして記述)
# 2value = 10       # 先頭が数字はNG
# user-name = "x"   # ハイフンはNG
# class = 1         # 予約語はNG
print(user_name, value2)
実行結果
予約語の一部: ['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class']
taro 10

スネークケースで読みやすく命名する

PEP 8では、変数名は小文字とアンダースコアを用いるスネークケースが推奨されています。

意味が明確で、略語は控えめにします。

Python
# 良い例
total_price = 1280
user_count = 42

# あまり良くない例(意味が曖昧 or 読みにくい)
tp = 1280
UserCount = 42      # これはクラス名のスタイル(CapWords)

定数の書き方(全大文字)と注意点

Pythonに言語仕様としての定数はありませんが、慣例として全大文字・アンダースコアで「変更しない意図」を示します。

実際には再代入できてしまうため、意図しない変更を避ける運用ルールが大切です。

Python
PI = 3.14159
MAX_RETRY = 3

# 定数でも再代入は可能(避けるべき)
# PI = 3  # 実行はできるが、意味的にNG
print(PI, MAX_RETRY)
実行結果
3.14159 3

型変換と文字列フォーマットの使い方

明示的な型変換(int, float, str)

ユーザー入力や外部データは文字列で来ることが多いため、明示的に変換します。

Python
s = "42"
n = int(s)     # '42' -> 42
f = float("3.5")
text = str(123)
print(n + 1, f * 2, text + "円")
実行結果
43 7.0 123円

暗黙の型変換に注意するポイント

数値演算ではint + floatfloatになるなどの暗黙変換がありますが、文字列と数値の連結はエラーです。

boolintのサブクラスである点にも注意します。

Python
print(1 + 2.0)        # 3.0 に昇格
# print("Age: " + 20) # TypeError: 文字列と数値は連結不可
print("Age: " + str(20))

# bool は int のサブクラス(True=1, False=0)
print(True + 2, False * 10)
実行結果
3.0
Age: 20
3 0

f文字列・formatでの出力(サンプルコード)

可読性と性能の観点で、Python 3.6以降はf文字列が推奨されます。

桁区切りや小数点以下の桁数も指定できます。

Python
name = "Yamada"
score = 98.765
count = 1234567

# f文字列
msg1 = f"{name}さんのスコアは{score:.2f}点(合計: {count:,})"
print(msg1)

# str.format
msg2 = "{0}さんのスコアは{1:.1f}点(合計: {2:,})".format(name, score, count)
print(msg2)
実行結果
Yamadaさんのスコアは98.77点(合計: 1,234,567)
Yamadaさんのスコアは98.8点(合計: 1,234,567)

変数のスコープとライフタイムの基礎

ローカル変数とグローバル変数(global, nonlocal)

関数内で代入した変数はローカル変数になります。

モジュール直下の変数はグローバル変数です。

関数内からグローバルを更新するときはglobal、ネストした関数で外側(ただしグローバルではない)の変数を更新するときはnonlocalを使います。

Python
x = 10  # グローバル

def use_local():
    x = 99  # ローカル(グローバルとは別)
    print("local x:", x)

def update_global():
    global x
    x = 42  # グローバルを書き換え
    print("updated global x:", x)

def outer():
    y = 0
    def inner():
        nonlocal y
        y += 1  # 外側スコープの y を更新
        return y
    print(inner(), inner(), inner())  # 1 2 3

use_local()
print("global x before:", x)
update_global()
print("global x after:", x)
outer()
実行結果
local x: 99
global x before: 10
updated global x: 42
global x after: 42
1 2 3

ミュータブルなオブジェクト参照時の注意点

リストや辞書などミュータブル(可変)なオブジェクトは、別名で同じ実体を参照していると、片方の変更がもう片方にも影響します。

コピーやデフォルト引数に注意します。

Python
# 参照の共有による影響
a = [1, 2, 3]
b = a          # 同じリストを参照
b.append(4)
print("a:", a, "b:", b)  # a も更新される

# シャローコピーで独立させる
c = a.copy()   # または list(a) / a[:] など
c.append(5)
print("a:", a, "c:", c)

# デフォルト引数の落とし穴
def append_item(x, items=None):
    if items is None:
        items = []      # 呼び出しごとに新しいリストを作る
    items.append(x)
    return items

print(append_item(1))        # [1]
print(append_item(2))        # [2] 独立している

# 悪い例(コメント):def bad_append(x, items=[]): ...  # 使い回されるのでNG
実行結果
a: [1, 2, 3, 4] b: [1, 2, 3, 4]
a: [1, 2, 3, 4] c: [1, 2, 3, 4, 5]
[1]
[2]

まとめ

本記事では、Pythonの変数を「値を入れる箱」として捉え、動的型付けの特性、代入とアンパック、主要なデータ型(int/float/str/bool/None)の基本操作、PEP 8に沿った命名、型変換と文字列フォーマット、さらにスコープとミュータブルな参照の注意点までを体系的に解説しました。

重要なのは、型を意識して読みやすい名前を付け、挙動が曖昧になりそうな箇所ではtype()や明示的な型変換を使って意図を明確にすることです。

サンプルコードを実行しながら理解を深めることで、堅牢で読みやすいPythonコードが書けるようになります。

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

URLをコピーしました!