我正在用Python 3編寫一個程序來處理幾個設備。我必須爲每個設備存儲常量。一些常量對於所有設備是常規的並且是永久固定的,但是其他一些常數根據設備的固件版本而不同,從版本到版本。我必須爲所有版本存儲常量,而不僅僅是最後一個。請告訴我Pythonic的方式來定義不同設備和它們的多個版本的常量。Python的多個常量版本
我目前的解決辦法是這樣的:
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'](https://docs.python.org/3/library/configparser.html)模塊。 – languitar
@languitar,非常感謝您的回答!這對我來說似乎是一個有趣的解決方案。我會盡力實現它。 –
@languitar,我沒有提到,但我應該以十六進制格式存儲常量。不幸的是,據我所知,[configparser](https://docs.python.org/3/library/configparser.html)不支持它。但我嘗試了類似的方式(YAML格式),並相應地更新了我的問題。 –