Импорт глобальных переменных между модулями - PullRequest
0 голосов
/ 05 сентября 2018

Текущая настройка для моего кода Python выглядит следующим образом:

Также используется для других проектов: general_settings.py - заботится об импорте и некоторых общих служебных функциях actual_functions.py - «рабочие лошадки» для проекта

Специфичный для проекта variable_names.py = это где строки объявлены в переменных run_project.py - это где я вызываю функции

Я использую информацию из таблиц Excel, которые считываются в кадры данных Pandas. Поскольку для каждого проекта исходные таблицы Excel могут быть разными, я использую имя переменной для столбцов в коде.

Например, если я хочу суммировать остаток столбца, вместо того, чтобы делать

df['Balance'].sum()

Сначала я определил бы баланс:

bal = 'Balance' and then use df[bal].sum()

Причина в том, что иногда исходные файлы Excel имеют другой заголовок, например «Текущий баланс» вместо «Баланс». Обновляя переменную 'bal', я легко могу объяснить это, это также позволяет мне использовать короткие имена переменных, держать код коротким и использовать автозаполнение (я использую PyCharm).

В actual_functions.py и run_project.py я использую оператор из general_settings import * and from variable_names import *

Это прекрасно работает, но не похоже на оптимальное решение.
1. В случае, если я хочу использовать actual_functions.py для запуска другой ленты, я должен изменить инструкцию import в верхней части этого скрипта.
2. Я использую глобальные переменные для прохождения строк, что не очень хорошая практика

Две вышеуказанные точки могут быть решены с помощью параметров в функциях, в которых эти переменные определены, однако, поскольку существует довольно много имен переменных (около 20), невозможно импортировать каждое из имен переменных в функции в actual_functions.py.

Возможно ли какой-нибудь файл настроек (словарь) импортировать имена / строки переменных в каждую из функций? Или другое решение, которое мне не хватает? Любые указатели будут оценены.

Спасибо за ответ ниже, я нашел эту ссылку для использования подклассов http://devanla.com/case-for-inheriting-from-pandas-dataframe.html

1 Ответ

0 голосов
/ 05 сентября 2018

Если у вас есть одна функция, которая требует большого количества параметров, вы можете помочь, предоставив полезные значения по умолчанию, поэтому при вызове необходимо указывать только некоторые параметры.

Если у вас есть набор связанных функций, которые принимают аналогичный набор параметров, подумайте о том, чтобы поместить их в класс и сделать переменные-члены с общими настройками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...