Создать список в основном скрипте, создать контент в другом скрипте, вернуться к основному с контентом - PullRequest
0 голосов
/ 01 ноября 2019

В моем проекте я хочу согласовать выбранные данные, полученные из различных баз данных, и распечатать различия. Я

  1. создаю список, содержащий наборы данных для сверки (набор данных1, набор данных2, набор данных3)
  2. создаю словарь списков, где я храню выходные данные из каждой базы данных (то есть list_db1, list_db2, list_db3)
  3. цикл запуска, в котором для каждого набора данных выдается вызов для n баз данных (запросы sql читаются из внешнего файла)
  4. модифицировать возвраты базы данных (форматирование, но также и качественные изменения)
  5. выполнить некоторые операции над множествами возвращаемых данных
  6. распечатать различия
  7. очистить списки в словаре и перейти к следующему набору данных

Я бы хотел переместить шаг 4 из основногосценарий снаружи, чтобы добиться лучшей ремонтопригодности. Для набора данных A я хочу изменить данные из базы данных X способом x_A, из базы данных Y способом y_A, из базы данных Z способом z_A. Для набора данных B я хочу изменить данные из базы данных Z только способом z_B.

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

def retrieve_db1(dataset):
   ...
   list_db1.append(sql_output)
   ...
def retrieve_db2(dataset):
   ...
   list_db2.append(sql_output)
   ...
def retrieve_db3(dataset):
   ...
   list_db3.append(sql_output)
   ...

def myfunction(arg1,arg2):
     if arg1 == 'dataset1':
       if arg2 == 'list_db1':
          list_db1.append('x')
       elif arg2 == 'list_db3':
          list_db2.append('y')
       else:
          None 

    elif arg1 == 'dataset2':
       if arg2 == 'list_db3':
          list_db3.append('z')
       else:
          None
    ...
    return arg2

datasets = ['dataset1','dataset2','dataset3']
for d in datasets:
   mydict = {'list_db1':[],'list_db2':[],'list_db3':[]}

   retrieve_db1(d)
   myfunction(d,list_db1)
   retrieve_db2(d)
   myfunction(d,list_db2)
   retrieve_db3(d)       
   myfunction(d,list_db3)

   #... merge list_db1 and list_db2, find differences against list_db3, print out etc.

Как видите, сама функция является деревом решений, зависящим от обоих аргументов. Можно ли сохранить только часть кода с деревом решений в отдельном файле (скрипте)?

import other_script

def my_function(arg1,arg2):
    ...
    other_script(arg1,arg2)
    ...

Дерево довольно сложное, и это помогает в обслуживании обоих скриптов. Я не уверен, как гарантировать, что список, созданный с помощью основного скрипта, будет изменен при запуске other_script, то есть данные все еще будут там, когда я вернусь к main.

...