Лучшая альтернатива - заставить функцию принимать только пару параметров, а затем выполнить итерацию по всем парам вне функции и проверить, был ли на каком-либо шаге возвращен True
:
def report_time(greater_than=0, lower_than=24):
return greater_than < datetime.now().hour < lower_than
start_times = [10, 12, 20]
end_times = [11, 15, 22]
for start, end in zip(start_times, end_times):
if report_time(start, end):
logger.info('Hour is correct')
break
Это можно сократить, используя map
и any
:
valid_times = map(report_time, start_times, end_times)
if any(valid_times):
logger.info('Hour is correct')
Также, как упомянуто @AzatIbrakov в его комментарий к другому ответу , будет лучше, если вы будете работать с кортежами.Вы можете использовать filter
в этом случае:
def within_limits(limits=(0, 24)):
return limits[0] < datetime.now().hour < limits[1]
time_limits = [(10, 11), (12, 15), (20, 22)]
if any(filter(within_limits, time_limits)):
logger.info('Hour is correct')