Python(パイソン)は使いやすい文法で人気ですが、「定数(constant)」の使い方については、他のプログラミング言語とは少し違います。
「定数ってどうやって作るの?」「値が変わらないようにするには?」といった疑問を持つ人も多いでしょう。
この記事では、Pythonでの定数の作る裏技、使う場面、気をつけるポイントまで、初心者でもわかりやすく説明します。
Pythonに「定数」はあるの?

Pythonには本当の定数がない
実は、Pythonには「絶対に値が変わらない変数」という機能がありません。
JavaやC言語のように、一度値を決めたら二度と変更できない仕組みが、言語の機能として用意されていないのです。
「えっ、それじゃあ定数は使えないの?」と思うかもしれませんが、安心してください。
Pythonには「これは定数として使おう」という約束事があります。
この約束事を守ることで、プログラムが読みやすくなり、バグも減らすことができます。
文化的な慣習で定数を表現
Pythonのプログラマーたちは、「定数として使う変数」を特別な方法で書くことにしました。
これによって、「この変数は変更しないでね」という気持ちを伝えることができます。
Pythonには厳密な定数機能はありませんが、代わりに命名ルールや特別な方法を使います。では、具体的にどうやって定数を作るのでしょうか?
Pythonで定数を作る方法
大文字で名前をつける方法
Pythonでは、定数には「すべて大文字の変数名」をつけます。これが一番よく使われる方法です。
基本的な定数の書き方
PI = 3.14159
MAX_USER = 100
APP_NAME = "マイアプリ"
この書き方を見ると、他のプログラマーは「あ、これは定数だから変更しちゃダメだな」と理解できます。
注意:実際には変更できてしまう
PI = 3.14159
PI = 3 # エラーにならない(でも変更すべきではない)
Pythonの文法では変更できてしまいますが、開発者同士の「暗黙の約束」として、大文字の変数は変更しないことになっています。
単語をつなげる時のルール
定数の名前が長くなる時は、アンダースコア(_)でつなげます。
MAX_LOGIN_ATTEMPTS = 3
DEFAULT_TIMEOUT_SECONDS = 30
DATABASE_CONNECTION_STRING = "localhost:5432"
このルールを「スネークケース」と呼びます。
単語と単語の間に線(_)を引いて、ヘビ(スネーク)のように見えるからです。
命名ルールによる定数作成は簡単ですが、うっかり変更してしまう可能性があります。
次に、もう少し安全な方法を紹介します。
定数の変更を防ぐ高度な方法
クラスを使った方法
プログラムで定数が変更されるのを防ぎたい場合は、クラスという仕組みを使います。
class Const:
PI = 3.14159
MAX_USER = 100
def __setattr__(self, name, value):
raise TypeError("定数は変更できません")
# 定数を使う
const = Const()
print(const.PI) # 3.14159
# 変更しようとするとエラーになる
# const.PI = 3 # TypeError: 定数は変更できません
この方法だと、定数を変更しようとした時にエラーメッセージが表示されます。
typing.Finalを使う方法(Python 3.8以降)
新しいバージョンのPython(3.8以降)では、typing.Final
という機能が使えます。
from typing import Final
PI: Final = 3.14159
MAX_USER: Final = 100
ただし、この方法は「型チェックツール」と呼ばれる特別なプログラムでしかチェックされません。
普通に実行する時は、やっぱり変更できてしまいます。
定数が活躍する具体例

設定値をまとめる
アプリケーションの設定値を定数にまとめると、管理がしやすくなります。
# アプリケーションの設定
DEBUG_MODE = True
API_URL = "https://api.example.com"
TIMEOUT_SECONDS = 5
MAX_RETRY_COUNT = 3
設定を変更したい時は、この部分だけを修正すれば済みます。
条件分岐で使う
HTTPステータスコードやエラーコードを定数にすると、プログラムが読みやすくなります。
# ステータスコードを定数にする
STATUS_OK = 200
STATUS_NOT_FOUND = 404
STATUS_SERVER_ERROR = 500
# 使用例
if response.status_code == STATUS_OK:
print("データを正常に取得しました")
elif response.status_code == STATUS_NOT_FOUND:
print("データが見つかりませんでした")
数字だけ書くより、何を意味するかがわかりやすいですね。
定数ファイルを分ける
定数が多くなったら、別のファイルにまとめることができます。
constants.py(定数ファイル)
# API関連の定数
BASE_URL = "https://api.example.com"
API_VERSION = "v1"
TIMEOUT = 30
# データベース関連の定数
DB_HOST = "localhost"
DB_PORT = 5432
DB_NAME = "myapp"
main.py(メインプログラム)
from constants import BASE_URL, API_VERSION
# 定数を使用
api_url = f"{BASE_URL}/{API_VERSION}/users"
このように定数を1か所にまとめると、コードの管理がとても楽になります。
定数を使うことで、プログラムが読みやすくなり、修正も簡単になります。最後に、Pythonで定数を使う時に気をつけるポイントをまとめておきます。
Pythonの定数で気をつけるポイント
定数でも値は変えられる
一番大切なポイントです。Pythonの定数は、技術的には普通の変数と同じです。
PI = 3.14159
PI = 3 # エラーにならないが、やってはいけない
定数を変更しないのは、プログラマー同士の「約束」だということを覚えておきましょう。
リストや辞書を定数にする時の注意
リストや辞書のような「中身を変更できるオブジェクト」を定数にする時は、特に注意が必要です。
# 危険な例
CONFIG = {"debug": True, "version": "1.0"}
CONFIG["debug"] = False # 中身は変更できてしまう
ALLOWED_EXTENSIONS = [".jpg", ".png", ".gif"]
ALLOWED_EXTENSIONS.append(".bmp") # 新しい要素を追加できてしまう
変数名は変更していませんが、中身は変わってしまいます。
安全な解決策
中身を変更されたくない場合は、タプル(tuple)を使いましょう。
# 安全な方法
ALLOWED_EXTENSIONS = (".jpg", ".png", ".gif") # タプルは変更不可
# 辞書の場合は少し複雑
from types import MappingProxyType
CONFIG = MappingProxyType({"debug": True, "version": "1.0"})
タプルやMappingProxyType
は、一度作ったら中身を変更できません。
定数をどこに書くかも大切
定数はファイルの上の方や、専用のファイルにまとめて書きましょう。
良い例
# ファイルの上部に定数をまとめる
MAX_ATTEMPTS = 3
TIMEOUT = 30
def login_user():
# 関数の中で定数を使用
pass
悪い例
def some_function():
MAX_ATTEMPTS = 3 # 関数の中に定数を書くのは良くない
まとめ
Pythonでの定数の使い方は、他の言語とは少し違います。重要なポイントをまとめると:
定数の作り方
- 変数名をすべて大文字にする
- 単語の間はアンダースコア(_)でつなぐ
- より安全にしたい場合はクラスや
typing.Final
を使う
定数を使うメリット
- プログラムが読みやすくなる
- 設定の変更が簡単になる
- バグが減る
気をつけるポイント
- Pythonの定数は変更可能(約束として変更しない)
- リストや辞書は中身を変更されやすい
- 定数はファイルの上部や専用ファイルにまとめる
コメント