【问题标题】:Python multiple versions of constantsPython 多个版本的常量
【发布时间】:2017-03-22 15:13:57
【问题描述】:

我正在用 Python 3 编写一个程序来处理多种设备。而且我必须为每个设备存储常量。一些常量对所有设备都是通用的并且永久固定,但其他一些常量因版本而异,具体取决于设备的固件版本。我必须为所有版本存储常量,而不仅仅是最后一个。请告诉我为不同设备和多个版本定义常量的 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)

提前感谢您!或者,如果您能指出我可以阅读上述内容的方向,我也将不胜感激。

UPD1:

感谢@languitar,我决定使用 INI/JSON/YAML/TSON... 格式之一。例如,库 python-anyconfig 中支持的格式。格式 INI(由@languitar configparser 提出)看起来很适合我的目的(TSON 似乎也很有趣),但不幸的是,它们都不支持十六进制值。我很惊讶。但我所有的常量都应该有十六进制格式。然后我决定尝试 YAML 格式。现在带有常量的文件如下所示:

# 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

但我不确定这是否是为设备及其所有固件版本存储常量的正确方法

【问题讨论】:

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

标签: python python-3.x constants


【解决方案1】:

把你的名字全部改成大写

点赞GENERAL, DEVICE_1, etc

【讨论】:

  • 谢谢,但这不是我需要的。如果我必须存储几个常见的常量,我选择了这种方式,但困难在于不同设备和不同固件的不同常量。
猜你喜欢
  • 1970-01-01
  • 2014-01-23
  • 2013-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-03
相关资源
最近更新 更多