Подтвердить что ты не робот

Python - лучший/самый чистый способ определения постоянных списков или словарей

Первый пользователь в переполнении стека, и я рад быть здесь.

INTRO: Недавно я начал волшебное приключение в мир программирования Python - мне это нравится. Теперь все прошло гладко в моем неловком переходе с C, но у меня возникли проблемы с созданием чего-то, что было бы синонимом файла HEADER (.h).

ПРОБЛЕМА: У меня есть словари и списки среднего размера (около 1000 элементов), длинные перечисления и "#defines" (ну не совсем), но я не могу найти ЧИСТЫЙ способ организовать их все. В C я бы бросил их все в заголовочный файл и никогда не задумывался об этом, однако, на Python, который не представляется возможным или так, я думаю.

ТЕКУЩЕЕ ВРЕМЯ РЕШЕНИЕ: Я инициализирую все переменные CONSTANT в верхней части модуля MODULE или FUNCTION (модуль, если ему нужны несколько функций).

ЗАКЛЮЧЕНИЕ: я был бы всегда благодарен, если бы кто-то придумал способ ЧУВСТВИТЕЛЬНО организовать постоянную переменную.

СПАСИБО СМОТРЕТЬ!

4b9b3361

Ответ 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 и обещать не мутировать их.