定数の使い方 | 変数と定数 | Python本格超入門

スポンサーリンク
スポンサーリンク
amazon
スマイルSALE
--:--:--
ad. 価格範囲を指定して商品を探せます

定数の使い方

定数とは、一度定義するとプログラムの実行中にその値を変更しない値のことです。定数は、プログラム内で固定の値を扱うときに便利で、コードの可読性や保守性を向上させます。この章では、Pythonにおける定数の使い方について説明します。

Pythonにおける定数の特徴

Pythonでは、他のプログラミング言語のように「定数」を厳密に定義する構文(constfinal など)はありません。しかし、慣習として定数を定義する際には、大文字で名前をつけるのが一般的です。プログラマーは、大文字で定義された変数を「定数」として扱い、プログラム中でその値を変更しないことを心がけます。

定数の定義方法

Pythonで定数を定義する際は、次のように大文字の名前を使って変数を定義します。複数の単語を組み合わせる場合は、アンダースコアで繋ぎます(例:TAX_RATE)。

# 定数の例
PI = 3.14159  # 円周率
GRAVITY = 9.81  # 重力加速度 (m/s^2)
TAX_RATE = 0.10  # 消費税率

この例では、PIGRAVITYが定数として定義されています。Pythonでは、定数に対して厳密な保護機能はありませんが、慣習的にこのように大文字で定義された変数は変更されないことが期待されています。

定数の使い方

定数は、プログラムの中で頻繁に使われる固定値に対して使います。これにより、後から値を変更する必要が生じた場合でも、定数の値を1カ所変更するだけで済むため、メンテナンスが容易になります。

# 定数を使った計算
PI = 3.14159
radius = 5

# 円の面積を計算
area = PI * (radius ** 2)
print(f"円の面積: {area}")

この例では、PIという定数を使って円の面積を計算しています。定数を使うことで、コードの意味が明確になり、理解しやすくなります。

追加解説:定数を使わないとどうなるか?(マジックナンバーの回避)

もし定数を使わずに、コード内に直接 0.101050 といった生の数値をそのまま書き込んでしまうと、後から見返したときにその数字が何を意味しているのか分からなくなってしまいます。これをプログラミング用語で「マジックナンバー(謎の数字)」と呼び、バグの原因になるため嫌われています。定数に名前をつけてあげることで、マジックナンバーを解消することができます。

# 悪い例:マジックナンバー(0.1 が何を指すのか、後から分かりづらい)
price = 1000
total = price * 1.1

# 良い例:定数を使うことで、1.1 が「消費税込みの倍率」であることが一目でわかる
TAX_MODIFIER = 1.1
price = 1000
total = price * TAX_MODIFIER

定数を使う際の注意点

定数を使う際には、いくつかの注意点があります。

  • 定数名の命名規則: 全て大文字で名前をつけることが推奨されます。これにより、定数であることが一目でわかります。
  • 定数は変更しない: 定数の値を変更しないように注意しましょう。Pythonでは強制的に値の変更を防ぐ機能はありませんが、コードの可読性や一貫性を保つためにも、定数は一度定義したら変更しないことが重要です。
  • コメントを活用: 特に物理定数やプログラムの設定値など、意味のある定数にはコメントをつけてその役割を明記することで、後からの理解を助けます。

Pythonで定数を保護する方法(実践編)

Pythonには定数を厳密に保護する構文がありませんが、現代のPython開発では、typingモジュールの Final 型を使って「これは変更しない定数である」と明示する手法が主流になっています。

from typing import Final

# Final型を使って定数を宣言する
VERSION: Final = "1.0.0"

# もし誤って再代入しようとすると、VSCodeなどのエディタ(静的解析ツール)が警告を出してくれます
VERSION = "2.0.0"  # 警告: "VERSION" is Final and cannot be re-assigned

また、複数の関連する定数をグループ化して管理したい場合は、提示されているように enum モジュールを使用するのも有効なアプローチです。

from enum import Enum

class Constants(Enum):
    PI = 3.14159
    GRAVITY = 9.81

# 定数の利用
print(Constants.PI.value)
print(Constants.GRAVITY.value)

Enumを使用することで、値の変更をシステム的に防ぎ、定数をより安全に扱うことができます。

まとめ

Pythonでは、定数を厳密に定義する構文は存在しませんが、慣習に従って大文字の変数名を定数として扱います。定数はプログラムの可読性や保守性を向上させるために重要です。プログラム内で頻繁に使われる値や、変更されるべきでない値には、定数を使用することをお勧めします。