Python: лучший способ структурировать переменные модуля в импортированном модуле - PullRequest
0 голосов
/ 30 августа 2018

Предположим, у меня есть список ссылочных номеров в файле 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 разных модулях.

1 Ответ

0 голосов
/ 30 августа 2018

Вы можете легко загрузить данные в формате csv с помощью платформы Pandas

import pandas as pd
dataframe=pd.read_csv('numbers.csv')

, чтобы проверить, присутствует ли число в кадре данных с помощью этого кода:

numbers=[1,3,8]
for number in numbers:
    if number in dataframe[dataframe.columns[0]]:
        print True
    else:
        print False
...