В моем проекте я хочу согласовать выбранные данные, полученные из различных баз данных, и распечатать различия. Я
- создаю список, содержащий наборы данных для сверки (набор данных1, набор данных2, набор данных3)
- создаю словарь списков, где я храню выходные данные из каждой базы данных (то есть list_db1, list_db2, list_db3)
- цикл запуска, в котором для каждого набора данных выдается вызов для n баз данных (запросы sql читаются из внешнего файла)
- модифицировать возвраты базы данных (форматирование, но также и качественные изменения)
- выполнить некоторые операции над множествами возвращаемых данных
- распечатать различия
- очистить списки в словаре и перейти к следующему набору данных
Я бы хотел переместить шаг 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.