2016-03-19 5 views
0

У меня есть код, как показано ниже:Как передать функцию как параметр другой функции?

if text == 'today': 
    date1, date2 = dt.today_() 
    result, data = ga.get_sessions_today_data(user_id, date1, date2) 
    result, data, caption = get_final_caption(result, data, date1, date2, 'hour', 'sessions') 
    handle_result(chat_id, result, data, caption) 
elif text == 'yesterday': 
    date1, date2 = dt.yesterday() 
    result, data = ga.get_sessions_today_data(user_id, date1, date2) 
    result, data, caption = get_final_caption(result, data, date1, end_date, 'hour', 'sessions') 
    handle_result(chat_id, result, data, caption) 
... 

код повторяется много-много раз, просто dt.function() и ga.function() отличаются. Как я могу оптимизировать код?

ответ

7

Вы можете сделать словарь, содержащий функции для каждой возможности text. Не ставьте круглые скобки после функции, потому что вы не хотите, чтобы называть их:

options = {"today": dt.today_, "yesterday": dt.yesterday} # etc 

Тогда вы могли бы сделать это, чтобы заменить существующий код:

date1, date2 = options[text]() # Get the correct function and call it 
result, data = ga.get_sessions_today_data(user_id, date1, date2) 
result, data, caption = get_final_caption(result, data, date1, date2, 'hour', 'sessions') 
handle_result(chat_id, result, data, caption) 
Смежные вопросы