Python - лучший/самый чистый способ определения постоянных списков или словарей
Первый пользователь в переполнении стека, и я рад быть здесь.
INTRO: Недавно я начал волшебное приключение в мир программирования Python - мне это нравится. Теперь все прошло гладко в моем неловком переходе с C, но у меня возникли проблемы с созданием чего-то, что было бы синонимом файла HEADER (.h).
ПРОБЛЕМА: У меня есть словари и списки среднего размера (около 1000 элементов), длинные перечисления и "#defines" (ну не совсем), но я не могу найти ЧИСТЫЙ способ организовать их все. В C я бы бросил их все в заголовочный файл и никогда не задумывался об этом, однако, на Python, который не представляется возможным или так, я думаю.
ТЕКУЩЕЕ ВРЕМЯ РЕШЕНИЕ: Я инициализирую все переменные CONSTANT в верхней части модуля MODULE или FUNCTION (модуль, если ему нужны несколько функций).
ЗАКЛЮЧЕНИЕ: я был бы всегда благодарен, если бы кто-то придумал способ ЧУВСТВИТЕЛЬНО организовать постоянную переменную.
СПАСИБО СМОТРЕТЬ!
Ответы
Ответ 1
Поместите свои константы в свой собственный модуль:
# constants.py
RED = 1
BLUE = 2
GREEN = 3
Затем импортируйте этот модуль и используйте константы:
import constants
print "RED is", constants.RED
Константы могут быть любым значением, которое вам нравится, здесь показаны целые числа, но списки и dicts будут работать одинаково.
Ответ 2
Обычно я делаю это:
Файл: константы .py
CONSTANT1 = 'asd'
CONSTANT_FOO = 123
CONSTANT_BAR = [1, 2, 5]
Файл: your_script.py
from constants import CONSTANT1, CONSTANT_FOO
# or if you want *all* of them
# from constants import *
...
Теперь ваши константы находятся в одном файле, и вы можете их импортировать и использовать.
Ответ 3
Сделайте отдельный файл constants.py
и поместите туда все глобально-релевантные константы. Затем вы можете import constants
ссылаться на них как constants.SPAM
или делать (сомнительный) from constants import *
для обозначения их просто как SPAM
или EGGS
.
Пока мы здесь, обратите внимание, что Python не поддерживает постоянные константы. Соглашение состоит только в том, чтобы называть их в ALL_CAPS
и обещать не мутировать их.