Как создать модуль констант, доступный напрямую и через словарьPython

Программы на Python
Ответить
Anonymous
 Как создать модуль констант, доступный напрямую и через словарь

Сообщение Anonymous »

Я хочу создать модуль под названием «constants.py», который будет содержать все константы, специфичные для моей системы.
Чтобы обеспечить гибкость, я хотел бы иметь возможность прямого доступа к константам. вот так:

Код: Выделить всё

constants.power_1
constants.power_2
constants.data_rate_1
constants.data_rate_2
...
потому что он короткий, или получите доступ к константам через словарь следующим образом:

Код: Выделить всё

constants['system_1']['power']
constants['system_2']['power']
constants['system_1']['data_rate']
constants['system_2']['data_rate']
...
потому что это полезно, когда я иногда использую константу внутри такого цикла:

Код: Выделить всё

systems = ['system_1', 'system_2']
for system in systems:
power = constants[system]['power']
var_2 = var_1 * power
Моя проблема в том, что я не могу использовать оба метода одновременно.
Что я могу сделать:
Вариант 1. Забудьте о доступе к константам, например, Constants.power_1, и используйте только словарь, например, Constants['power_1']. Поэтому я объявляю их следующим образом в «constants.py»:

Код: Выделить всё

constants['power_1'] = 10
constants['system_1']['power'] = constants['power_1']
и используйте их следующим образом:

Код: Выделить всё

from constants import *
var_2 = var_1 * constants['power_1']
var_2 = var_1 * constants['system_1']['power']
Минусы:
  • Мне не очень нравится импорт *, даже если я только импортирую один словарь, я предпочитаю простой импорт.
  • Прямой доступ на 4 символа длиннее ().
Вариант 2. Использовать промежуточное имя для моего словаря. Поэтому я объявляю их следующим образом в «constants.py»:

Код: Выделить всё

power_1 = 10
varname['system 1']['power'] = power_1
и используйте их следующим образом:

Код: Выделить всё

import constants
var_2 = var_1 * constants.power_1
var_2 = var_1 * constants.varname['system 1']['power']
Минусы:
  • Я не нашел осмысленного имени для varname, потому что это не так. необходимо (я мог бы поставить системный, но это избыточно).
  • Длительный доступ становится длиннее.
Видите ли вы другой способ решить эту проблему?

Подробнее здесь: https://stackoverflow.com/questions/792 ... dictionary
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»