1. 前言:Python 中常數的重要性
在 Python 中,與 C 語言或 Java 不同,並沒有「const
」或「final
」這類關鍵字來定義常數。然而,使用常數可以提高程式碼的可讀性與維護性,並增強整體程式的穩定性。特別是在處理物理常數或設定值等不應在執行期間變更的數值時,使用常數是非常有效的。
例如,在 C 語言中,可以使用「const
」來確保數值不可變更,但 Python 並未內建對應的機制。因此,開發人員需要自行明確標示某個值為「常數」,並採取適當的方法來確保其不被修改。
2. Python 中定義常數的基本方法
使用大寫字母定義變數的慣例
儘管 Python 並沒有正式的常數定義方式,但一般來說,使用大寫字母和底線(_)來命名常數是一種常見的慣例。這樣的命名方式可以讓其他開發者在閱讀程式碼時,明確理解該變數不應被修改。此外,這種命名規則也被 Python 的PEP8 程式碼風格指南所推薦。
範例:
PI = 3.14159
MAX_CONNECTIONS = 100
這樣定義的常數將在整個程式中保持不變。透過大寫命名,可以明確標示該變數為常數,降低誤操作導致重新賦值的風險。
使用範例:計算圓周長
radius = 5
circumference = 2 * PI * radius
print(circumference) # 輸出: 31.4159
在處理物理常數或設定值時,使用大寫字母定義的變數會非常有幫助。這種方法在 Python 中被廣泛使用,也是實際專案中的標準做法。

3. 管理常數的進階技術
建立 const 類別來保護常數
由於 Python 沒有嚴格的常數概念,因此常數的值可能會被意外更改。為了避免這種情況,可以透過自訂類別來防止重新賦值。這種方法允許我們在試圖重新賦值特定值時觸發錯誤。
範例:定義 Const 類別
class ConstError(TypeError):
pass
class Const:
def __setattr__(self, name, value):
if name in self.__dict__:
raise ConstError(f"無法重新賦值常數 ({name})")
self.__dict__[name] = value
const = Const()
const.PI = 3.14159
# const.PI = 3.14 # ConstError: 無法重新賦值常數 (PI)
透過這種方法,我們可以避免常數被意外重新賦值,從而更嚴格地管理常數。
利用 Enum 模組
自 Python 3.4 起,可以使用enum
模組來將多個常數分組管理。Enum
類別能夠提供類似常數的行為,並確保程式執行期間不會意外更改這些值。
範例:使用 Enum 定義常數
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
print(Color.RED) # 輸出: Color.RED
透過 Enum,可以有效管理一組相關的常數,並確保它們在程式中保持不變。
4. 使用模組與元類來進行進階常數管理
模組級別的常數管理
在大型專案中,將常數集中管理是非常重要的。這樣可以更輕鬆地修改或新增常數,並提升專案的維護性。在 Python 中,建議將常數整理到獨立的檔案中,然後在其他程式碼中匯入。
範例:在 settings.py
中管理常數
# settings.py
PI = 3.14159
EULER = 2.71828
# main.py
import settings
print(settings.PI) # 輸出: 3.14159
這種方法可以讓所有程式碼共用相同的常數,確保變數的一致性。
使用元類來管理常數
此外,也可以透過元類(metaclass)來防止類別內的常數被修改。這種方法可以提升程式的穩定性,並確保常數不會被意外重新賦值。
範例:使用元類定義常數
class ConstantMeta(type):
def __setattr__(cls, key, value):
if key in cls.__dict__:
raise AttributeError("無法重新賦值常數")
super().__setattr__(key, value)
class Constants(metaclass=ConstantMeta):
PI = 3.14159
# Constants.PI = 3.14 # AttributeError: 無法重新賦值常數
透過這種方法,我們可以確保類別內的常數不會被修改,使程式更加穩定。

5. 在實際專案中如何使用常數
大型專案中常數管理的最佳實踐
在大型專案中,建議將常數依據不同模組分類,並在需要的地方匯入使用。這樣可以確保常數管理的一致性,提高程式碼的可維護性。
範例:使用模組管理常數
# config.py
DATABASE_URI = "postgresql://user:password@localhost/mydb"
MAX_CONNECTIONS = 100
# main.py
from config import DATABASE_URI, MAX_CONNECTIONS
print(DATABASE_URI)
透過這種方式,可以集中管理專案中的設定值,使程式碼更加清晰易懂,並且方便後續的維護與擴展。
6. 在 Python 中使用常數時需要注意的事項
注意:常數並非完全不可變
由於 Python 的特性,即使是以大寫命名的常數,仍然可以被重新賦值。因此,如果需要嚴格保護常數,應該考慮使用 Enum
、類別、元類等進階方法。
此外,在管理常數時,應該遵循程式碼規範,確保整個開發團隊都能統一遵循相同的命名規則。特別是在多人協作的專案中,統一命名規則與常數的存放位置,有助於減少誤解與錯誤。

7. Python 中常數的常見問題(FAQ)
「在 Python 中如何定義常數?」
由於 Python 並沒有「const
」這類關鍵字,通常會使用大寫字母來定義變數,表示該變數應視為常數。此外,為了避免意外修改,可以使用 Enum
、類別或元類來保護常數。
「Enum 和大寫變數的區別是什麼?」
Enum
適合用於管理一組相關的常數,並防止意外修改數值。而大寫變數則是較為簡單的常數定義方式,但缺乏防止重新賦值的機制,因此仍然可以被更改。
「為什麼 Python 沒有內建的常數關鍵字?」
Python 的設計理念強調「簡潔且可讀性高的程式碼」。嚴格的常數保護機制可能會影響 Python 的靈活性,因此 Python 沒有提供內建的 const
關鍵字。開發者需要自行決定哪些值應被視為常數,並透過命名規範或額外的類別來管理它們。
「如何保護常數值不被修改?」
- 使用大寫命名常數:這是最簡單且最常見的方式。
- 使用類別或模組:可以透過
const
類別或Enum
來保護常數。 - 遵循程式碼規範:確保整個團隊都有統一的規則來管理常數。

8. 總結:如何有效地在 Python 中使用常數
與其他程式語言不同,Python 並沒有內建的常數定義關鍵字。然而,透過正確的方法來定義與管理常數,可以提高程式碼的可讀性與維護性。
- 簡單的定義方式:根據 PEP8 規範,使用大寫命名變數來表示常數,讓程式碼清楚易懂。
- 防止重新賦值:可以使用
const
類別、Enum
或元類來確保常數不會被誤修改。 - 在大型專案中統一管理:透過模組將常數集中管理,讓整個專案的設定值保持一致。
透過這些方法,可以提升 Python 程式的穩定性與可維護性,使長期維護更加輕鬆。