Недавно с коллегой обсуждали задачу:
Нужно запускать расчеты по разным продуктам с разной начальной датой, чтобы не дублировать уже загруженную инфу.
1️⃣ Первая версия кода была такая - каждой функции по циклу:
for dt in pd.date_range(start_dt1, end_dt):
load1(start_dt1)
for dt in pd.date_range(start_dt2, end_dt):
load2(start_dt2)
И таких функций 10. 20. А Хотелось компактно организовать🎁
2️⃣ Вторая версия - итерируемся от минимальной даты и навешиваем условие перед запуском каждой функции:
min_dt = min(start_dt1, start_dt2)
for dt in pd.date_range(min_dt, end_dt):
if dt >= start_dt1:
load1(dt)
elif dt >= start_dt2:
load2(dt)
Тоже с условиями слишком громоздко🏔
3️⃣ В итоге мы дошли до такой финальной версии:
⭐️создаем функцию для генерации цикла по датам
⭐️создаем список функций с датами
⭐️передаем функции как аргументы
def loop(start_dt, end_dt, func):
for dt in pd.date_range(start_dt, end_dt):
func(dt)
func_list = [(load1, start_dt1), (load2, start_dt2)]
for func, dt in func_list:
loop(dt, end_dt, func)
Чтобы добавить новую функцию, теперь достаточно дописать ее в func_list.
А у вас есть идеи элегантного решения?
