カテゴリ: Python 更新日: 2025/12/05

Pythonで定数を定義する方法!変更されない変数の書き方と命名ルール

Pythonで定数を定義する方法!変更されない変数の書き方と命名ルール
Pythonで定数を定義する方法!変更されない変数の書き方と命名ルール

先生と生徒の会話形式で理解しよう

生徒

「Pythonで、途中で値が変わらない変数、つまり定数を作るにはどうすればいいですか?」

先生

「Pythonには、他の言語のような定数を作るための特別な機能はありませんが、慣習的な方法があります。詳しく見ていきましょう。」

生徒

「具体的には、どのように書けばいいんですか?」

先生

「それでは、Pythonでの定数の定義方法と命名ルールについて、わかりやすく解説していきます。」

1. Pythonにおける定数とは?

1. Pythonにおける定数とは?
1. Pythonにおける定数とは?

Pythonでは、他の言語のように定数を明示的に定義する構文はありません。しかし、一度値を設定したら変更しないという慣習を守ることで、定数として扱うことができます。

例えば、円周率や最大接続数など、プログラム全体で変更されるべきでない値を定数として定義します。

2. 定数の命名ルール:全て大文字とアンダースコア

2. 定数の命名ルール:全て大文字とアンダースコア
2. 定数の命名ルール:全て大文字とアンダースコア

PythonのスタイルガイドであるPEP 8では、定数の命名には全て大文字を使用し、単語の区切りにはアンダースコア(_)を使うことが推奨されています。これをアッパースネークケースと呼びます。

例:


PI = 3.14159
MAX_CONNECTIONS = 100
DEFAULT_TIMEOUT = 30

このように命名することで、その変数が定数であることを明示できます。

3. 定数の定義場所:モジュールのトップレベル

3. 定数の定義場所:モジュールのトップレベル
3. 定数の定義場所:モジュールのトップレベル

定数は、モジュールのトップレベル、つまり関数やクラスの外で定義するのが一般的です。これにより、プログラム全体で一貫して使用できます。

例:


# 定数の定義
PI = 3.14159

def calculate_circumference(radius):
    return 2 * PI * radius

4. 定数の再代入は避ける

4. 定数の再代入は避ける
4. 定数の再代入は避ける

Pythonでは、定数も通常の変数と同様に再代入が可能です。しかし、定数として定義した変数に再代入することは、慣習的に避けるべきとされています。

例:


PI = 3.14159
PI = 3.14  # 慣習的には避ける

このような再代入は、コードの可読性や保守性を損なう可能性があります。

5. 定数を変更不可能にする方法

5. 定数を変更不可能にする方法
5. 定数を変更不可能にする方法

Pythonには、定数を完全に変更不可能にする組み込みの機能はありませんが、クラスやプロパティを使って擬似的に定数を作ることができます。

例:プロパティを使った定数の定義


class Constants:
    @property
    def PI(self):
        return 3.14159

constants = Constants()
print(constants.PI)  # 出力: 3.14159
constants.PI = 3.14  # AttributeErrorが発生

この方法では、定数に再代入しようとするとエラーが発生します。

6. 定数の使用例:円周の計算

6. 定数の使用例:円周の計算
6. 定数の使用例:円周の計算

定数を使って、円の周囲の長さ(円周)を計算する例を見てみましょう。


PI = 3.14159

def calculate_circumference(radius):
    return 2 * PI * radius

print(calculate_circumference(5))  # 出力: 31.4159

このように、定数を使うことで、コードの可読性と保守性が向上します。

まとめ

まとめ
まとめ

Pythonで定数を扱う考え方の整理

Pythonで定数を定義する方法について学んできた内容を振り返ると、まず重要なのは「定数専用の構文はない」という特徴です。すべての変数が再代入可能な柔軟な言語である一方、開発現場では変更されるべきでない値を明確に示すために、決められた慣習に従った書き方が求められます。特に大文字とアンダースコアを組み合わせたアッパースネークケースは、定数の意味を読み手に自然に伝えるための効果的な方法として広く使われています。これにより、円周率や最大値、アプリケーション設定値など、安定して扱うべきデータを整理しやすくなります。

また、定数はモジュールのトップレベルに配置することで、どこからでも統一的にアクセスできるようになり、読みやすく整ったコード構造を保つことができます。特に、複数の関数やクラスが同じ値を参照する場合には、トップレベルで宣言することが保守性向上に強く寄与する点も理解しておきたいところです。

定数の再代入ができてしまうPythonにおいて、意図しない変更を防ぐには開発者同士の暗黙の了解だけでなく、クラスやプロパティを利用して変更不可の仕組みを作る工夫も実務では役立ちます。この方法は、重要な値が書き換えられることで生じるバグを未然に防ぐ大きな助けとなります。特に大規模なプロジェクトでは、明示的に不変であることを保証したいケースが多く、このような定数クラスの利用が品質向上につながります。

さらに、定数を使ったサンプルコードとして円周を求める処理がありましたが、こうした計算処理でも可読性の高さはとても重要です。数字を直接埋め込むよりも、意味を持つ名前を与えた定数を使うことで、コードを読む側が意図を瞬時に理解できるようになります。長期的に見てミスを減らし保守しやすい構造を保つためには、こうした小さな工夫の積み重ねが欠かせません。

サンプルプログラムの振り返り


# アプリケーション全体で使用する定数
MAX_USER_COUNT = 500
DEFAULT_RATE = 1.25

class Config:
    @property
    def MAX_RETRY(self):
        return 3

# 定数を使った処理例
def apply_rate(value):
    return value * DEFAULT_RATE

def can_register_user(current_count):
    return current_count < MAX_USER_COUNT

config = Config()
print(apply_rate(200))
print(can_register_user(300))
print(config.MAX_RETRY)

上記のように、アッパースネークケースで定義した定数を活用することで、計算処理や条件分岐が明瞭になり、複雑なロジックでも誤解を生みにくいコードになります。また、プロパティを使った値の固定化も機能面で強力なサポートとなり、重要な設定値を安全に扱う基盤を整えることができます。

先生と生徒の振り返り会話

生徒

「Pythonでは定数専用の文法がなくても、慣習に従えば安全に扱えることがわかりました。特に大文字で書くことで意味が伝わりやすくなるところが印象的でした。」

先生

「その気づきはとても大切ですね。読み手に意図を伝えるための工夫が、結果的にバグを減らし品質を高めることにつながります。」

生徒

「クラスやプロパティで実質的に変更できない定数を作れるのも便利だと思いました。大規模な開発だと安全性が必要になりますし。」

先生

「その通りです。場面に応じて最適な方法を選べることがPythonの魅力の一つです。これからも今回学んだ命名や配置のルールを意識しながら、保守しやすいコードを心がけていきましょう。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Pythonで定数を定義するにはどうすればいいですか?

Pythonには定数を明示的に定義する構文はありませんが、一度値を代入したら変更しないという慣習で定数として扱います。コード上では通常の変数と同じように書きますが、値を変更しないように意識することが大切です。
カテゴリの一覧へ
新着記事
New1
Django
Djangoのプロジェクトとアプリの違いを徹底解説!初心者でも迷わない構造の考え方
New2
Flask
FlaskでRQ(Redis Queue)を使って非同期タスク管理を行う方法|初心者向けやさしい解説
New3
Flask
FlaskでCookieを安全に使う方法!HttpOnly・Secureフラグの使い方を徹底解説
New4
Flask
Flask‑RESTfulでREST APIを構築する手順まとめ!初心者向けにやさしく解説
人気記事
No.1
Java&Spring記事人気No1
Django
Django環境構築の全手順を完全解説!初心者でも迷わないPython・Djangoセットアップガイド
No.2
Java&Spring記事人気No2
Django
DjangoとFlaskの違いを完全比較!初心者でもわかるPythonフレームワーク入門
No.3
Java&Spring記事人気No3
Flask
Flaskアプリの環境変数設定方法!安全で柔軟な構成を実現しよう
No.4
Java&Spring記事人気No4
Flask
FlaskアプリをNginx + Gunicornで本番運用する方法!初心者でもわかるデプロイ構成の基本
No.5
Java&Spring記事人気No5
Python
Pythonの文字列を1文字ずつ処理する方法!for文やlist化の活用例
No.6
Java&Spring記事人気No6
Python
Pythonでリストをコピーする方法!copy()・スライス・list()の使い方を比較
No.7
Java&Spring記事人気No7
Python
Pythonのmatch文(パターンマッチング)とは?switch文の代替としての使い方をやさしく解説
No.8
Java&Spring記事人気No8
Python
Pythonで空白や不要な文字を削除する方法!strip(), rstrip(), lstrip() の使い方を初心者向けに解説