2017-03-22 33 views
0

我正在用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 

但我不知道,這是否是對存儲設備的常量和他們所有的固件版本

+0

也許你的常量根本不是恆定的,你真正需要的是一個設備特定的配置,例如使用['configparser'](https://docs.python.org/3/library/configparser.html)模塊。 – languitar

+0

@languitar,非常感謝您的回答!這對我來說似乎是一個有趣的解決方案。我會盡力實現它。 –

+0

@languitar,我沒有提到,但我應該以十六進制格式存儲常量。不幸的是,據我所知,[configparser](https://docs.python.org/3/library/configparser.html)不支持它。但我嘗試了類似的方式(YAML格式),並相應地更新了我的問題。 –

回答

0

只要改變你的名字全部大寫字母

正道

like GENERAL, DEVICE_1, etc

+0

謝謝,但這不是我所需要的。如果我必須存儲幾個常見的常量,我選擇了這種方式,但是對於不同的設備和不同的固件,其難點在於不同的常量。 –