Вот вопрос:
Используя модуль datetime в python, создайте итератор, который генерирует все часы между двумя объектами datetime.datatime.
it = hourly_it( d1, d2)
# где d1
и d2
являются datetime.datetime
объектами.Например,
from datetime import datetime
it = hourly_it( datetime(2018, 10, 2, 12), datetime(2018, 10, 3, 12))
будет генерировать все даты с 12:00 (полдень) 2 ноября до 12:00 (полдень) 3 ноября.
Вот мой код:
from datetime import date, timedelta as td, datetime
def hourly_it( d1, d2) :
start = d1
finish = d2
def f():
nonlocal start, finish
if(start>=finish): return None
start += td(hours=1)
return start
return f
когда я тестирую код с помощью:
from datetime import datetime
it = hourly_it( datetime(2018, 10, 2, 12), datetime(2018, 10, 3,12))
print(next(it))
Я получаю эту ошибку:
TypeError Traceback (последний вызов последнего)
in () 1 из datetime импорта datetime 2 it = hourly_it (datetime (2018, 10, 2, 12), datetime (2018, 10, 3, 12))
----> 3 print (следующий (это))
TypeError: объект 'function' не является итератором
Я понял это.Спасибо всем.Вот как вы делаете это без использования генератора.Я также должен отметить, что я поставил + 1 час перед возвратом и установил начало> =
from datetime import date, timedelta as td, datetime
def hourly_it( d1, d2) :
start = d1
finish = d2
def f():
nonlocal start, finish
if(start>=finish): return None
start += td(hours=1)
return start
return iter(f,None)