Python常量的多个版本

Python常量的多个版本,python,python-3.x,constants,Python,Python 3.x,Constants,我正在用Python3编写一个程序来处理几个设备。我必须为每个设备存储常量。有些常数适用于所有设备并永久固定,但有些常数因设备固件版本而异。我必须为所有版本存储常量,而不仅仅是最后一个版本。请告诉我为不同的设备和多个版本的设备定义常量的Pythonic方法 我当前的解决方案如下所示: general = { 'GENERAL_CONST_1': 1, 'GENERAL_CONST_2': 2, ... 'GENERAL_CONST_N': N } device

我正在用Python3编写一个程序来处理几个设备。我必须为每个设备存储常量。有些常数适用于所有设备并永久固定,但有些常数因设备固件版本而异。我必须为所有版本存储常量,而不仅仅是最后一个版本。请告诉我为不同的设备和多个版本的设备定义常量的Pythonic方法

我当前的解决方案如下所示:

general = {
    'GENERAL_CONST_1': 1,
    'GENERAL_CONST_2': 2,
    ...
    'GENERAL_CONST_N': N
}


device_1 = dict()
device_1[FIRMWARE_VERSION_1] = {
    'DEVICE_1_CONST_1': 1,
    'DEVICE_1_CONST_2': 2,
    ...
    'DEVICE_1_CONST_N': N
}
device_1[FIRMWARE_VERSION_1].update(general)

device_1[FIRMWARE_VERSION_2] = {
    'DEVICE_1_CONST_1': 1,
    'DEVICE_1_CONST_2': 2,
    ...
    'DEVICE_1_CONST_N': N
}
device_1[FIRMWARE_VERSION_2].update(general)


device_2 = dict()
device_2[FIRMWARE_VERSION_1] = {
    'DEVICE_2_CONST_1': 1,
    'DEVICE_2_CONST_2': 2,
    ...
    'DEVICE_2_CONST_N': N
}
device_2[FIRMWARE_VERSION_1].update(general)

device_2[FIRMWARE_VERSION_2] = {
    'DEVICE_2_CONST_1': 1,
    'DEVICE_2_CONST_2': 2,
    ...
    'DEVICE_2_CONST_N': N
}
device_2[FIRMWARE_VERSION_2].update(general)
# General consts for all devices and all versions
general: &general
    GENERAL_CONST_1: 1
    GENERAL_CONST_2: 2
    ...
    GENERAL_CONST_N: N

# Particular consts for device_1 for different firmware version
device_1: &device_1
    <<: *general
    # General consts for device_1 and all firmware versions
    DEVICE_1_CONST_1: 1
device_1:
    FIRMWARE_VERSION_1:
        <<: *device_1
        DEVICE_1_CONST_2: 2
        ...
        DEVICE_1_CONST_N: N
    FIRMWARE_VERSION_2:
        <<: *device_1
        DEVICE_1_CONST_2: 2
        ...
        DEVICE_1_CONST_N: N

# Particular consts for device_2 for different firmware version
device_2: &device_2
    <<: *general
    # General consts for device_2 and all firmware versions
    DEVICE_1_CONST_1: 1
device_2:
    FIRMWARE_VERSION_1:
        <<: *device_2
        DEVICE_1_CONST_2: 2
        ...
        DEVICE_1_CONST_N: N
    FIRMWARE_VERSION_2:
        <<: *device_2
        DEVICE_1_CONST_2: 2
        ...
        DEVICE_1_CONST_N: N
提前谢谢你!或者,如果你能为我指出我可以阅读上述内容的方向,我也将为此而感激

UPD1:

多亏了@languitar,我决定使用INI/JSON/YAML/TSON中的一个。。。格式。例如,库中支持的格式。格式INI(由@languitar提出)对于我来说看起来不错(TSON似乎也很有趣),但不幸的是,它们都不支持十六进制值。我很惊讶。但是我所有的常量都应该有十六进制格式。然后我决定尝试YAML格式。现在,包含常量的文件如下所示:

general = {
    'GENERAL_CONST_1': 1,
    'GENERAL_CONST_2': 2,
    ...
    'GENERAL_CONST_N': N
}


device_1 = dict()
device_1[FIRMWARE_VERSION_1] = {
    'DEVICE_1_CONST_1': 1,
    'DEVICE_1_CONST_2': 2,
    ...
    'DEVICE_1_CONST_N': N
}
device_1[FIRMWARE_VERSION_1].update(general)

device_1[FIRMWARE_VERSION_2] = {
    'DEVICE_1_CONST_1': 1,
    'DEVICE_1_CONST_2': 2,
    ...
    'DEVICE_1_CONST_N': N
}
device_1[FIRMWARE_VERSION_2].update(general)


device_2 = dict()
device_2[FIRMWARE_VERSION_1] = {
    'DEVICE_2_CONST_1': 1,
    'DEVICE_2_CONST_2': 2,
    ...
    'DEVICE_2_CONST_N': N
}
device_2[FIRMWARE_VERSION_1].update(general)

device_2[FIRMWARE_VERSION_2] = {
    'DEVICE_2_CONST_1': 1,
    'DEVICE_2_CONST_2': 2,
    ...
    'DEVICE_2_CONST_N': N
}
device_2[FIRMWARE_VERSION_2].update(general)
# General consts for all devices and all versions
general: &general
    GENERAL_CONST_1: 1
    GENERAL_CONST_2: 2
    ...
    GENERAL_CONST_N: N

# Particular consts for device_1 for different firmware version
device_1: &device_1
    <<: *general
    # General consts for device_1 and all firmware versions
    DEVICE_1_CONST_1: 1
device_1:
    FIRMWARE_VERSION_1:
        <<: *device_1
        DEVICE_1_CONST_2: 2
        ...
        DEVICE_1_CONST_N: N
    FIRMWARE_VERSION_2:
        <<: *device_1
        DEVICE_1_CONST_2: 2
        ...
        DEVICE_1_CONST_N: N

# Particular consts for device_2 for different firmware version
device_2: &device_2
    <<: *general
    # General consts for device_2 and all firmware versions
    DEVICE_1_CONST_1: 1
device_2:
    FIRMWARE_VERSION_1:
        <<: *device_2
        DEVICE_1_CONST_2: 2
        ...
        DEVICE_1_CONST_N: N
    FIRMWARE_VERSION_2:
        <<: *device_2
        DEVICE_1_CONST_2: 2
        ...
        DEVICE_1_CONST_N: N
#所有设备和所有版本的通用常量
常规:&常规
一般常数1:1
一般施工图2:2
...
一般常数:N
#不同固件版本的设备_1的特定常数
设备\u 1:&设备\u 1

只要把你的名字改成大写字母就行了


常规、设备\u 1等

可能您的常量根本不是常量,您真正需要的是设备特定的配置,例如使用模块。@languitar,非常感谢您的回答!对我来说,这似乎是一个有趣的解决方案。我现在将尝试实现它。@languitar,我没有提到,但我应该以十六进制格式存储常量。不幸的是,据我所知,他不支持。但我尝试了类似的方法(YAML格式),并相应地更新了我的问题。您可以将十六进制值作为字符串放入配置中,然后将它们解析为数字。这不是最好的,但也许能奏效。另一个选择是。谢谢,但这不是我需要的。如果我必须存储几个常用常量,我会选择这种方式,但困难在于不同设备和不同固件的常量不同。