常量是在整个程序执行过程中保持不变的值,虽然 Python 中没有常量的概念,但可以使用多种技术来创建常量。在本文中,我们将介绍在 Python 中定义常量的不同方法。
使用大写的变量名称
Python 中的一个常见约定是使用大写变量名称来指示应将变量视为常量,提示其他开发人员不应修改该值。
PI = 3.141592653589793
EULER_NUMBER = 2.718281828459045
MAX_VALUE = 100
在上面的示例中,通过使用大写字母定义了常量。但是,请务必注意,Python 不会阻止修改这些变量,需要依赖于程序员自觉遵守约定。
使用模块 enum
enum
模块提供了一种使用枚举定义常量的方法。
from enum import Enum
class Constant(Enum):
PI = 3.141592653589793
EULER_NUMBER = 2.718281828459045
print(Constant.PI.value)
print(Constant.EULER_NUMBER.value)
在上面这个示例中,使用 enum
模块定义一个名为 Constants
的枚举类来创建两个常量。常量被定义为枚举类的成员,可以使用 .value
属性访问常量值。尝试修改常量的值将引发异常。
使用模块 pconst
from pconst import const
const.PI = 3.141592653589793
const.MAX_VALUE = 100
print(const.PI)
print(const.MAX_VALUE)
如果尝试更新常量的值,将引发 ConstantError。
readonly 冻结变量
在 Python 中使用 readonly
库的装饰器,将变量标记为只读,从而防止在初始赋值后进行修改。
from readonly import readonly
@readonly
class Constants:
PI = 3.141592653589793
print(Constants.PI)
在上面示例中,如果对 Constants.PI
进行赋值,将引发错误 AttributeError: can't set attribute
。
@property 设置只读
创建只读类属性,可以使用@property装饰器,防止属性的更改。
class Constants:
_PI = 3.141592653589793
@property
def PI(self):
return self._PI
Const = Constants()
print(Const.PI)
配置文件中存储常量
可以使用 INI 格式的外部配置文件来存储常量,使用标准库 configparser
读取文件中的常量。
# constants.ini 文件
[CONSTANTS]
PI = 3.141592653589793
EULER_NUMBER = 2.718281828459045
MAX_VALUE = 100
from configparser import ConfigParser
constants = ConfigParser()
constants.read("constants.ini")
print(constants.get("CONSTANTS", "PI"))
print(constants.get("CONSTANTS", "EULER_NUMBER"))
print(constants.get("CONSTANTS", "MAX_VALUE"))
在 Python 中虽然没有对常量内置支持,但可以使用各种技术来定义它们,常量都有助于提高代码的可读性、更好的可维护性、清晰的意图传达、降低错误风险。