Предположим, у меня есть список ссылочных номеров в файле numbers.csv
.
Я пишу модуль checker.py
, который можно импортировать и вызывать для проверки номеров следующим образом:
import checker
checker.check_number(1234)
checker.py
загрузит список номеров и предоставит check_number
, чтобы проверить, есть ли данный номер в списке. По умолчанию он должен загружать данные из numbers.csv
, хотя можно указать путь:
DATA_FILEPATH = 'numbers.csv'
def load_data(data_filepath=DATA_FILEPATH):
...
REF_LIST = load_data()
def check_number(num, ref_list=REF_LIST):
...
Вопрос - Чередование переменных и функций мне кажется странным. Есть ли лучший способ структурирования checker.py
, чем выше?
Я прочитал отличный ответ на Как создать переменные для всего модуля в Python? .
Является ли лучшая практика для:
объявить REF_LIST
список, который я сделал выше?
создайте диктовку типа VARS = {'REF_LIST': None}
и установите VARS['REF_LIST']
в load_data
?
создайте тривиальный класс и присвойте clas.REF_LIST
в load_data
?
или еще, это зависит от ситуации? (И в каких ситуациях я использую какой?)
Примечание
Раньше я избегал этого, загружая данные только при необходимости в вызывающий модуль. Так в checker.py
:
DATA_FILEPATH = 'numbers.csv'
def load_data(data_filepath=DATA_FILEPATH):
...
def check_number(num, ref_list):
...
В вызывающем модуле:
import checker
ref_list = checker.load_data()
checker.check_number(1234, ref_list)
Но для меня не имело смысла загружать в вызывающий модуль, потому что мне нужно было бы load_data
5 раз, если я хочу проверить числа в 5 разных модулях.