这是问题:
使用python的datetime模块,创建一个迭代器,该迭代器生成两个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))
会生成11月3日12:00(正午)至11月3日12:00(正午)之间的所有日期时间。
这是我的代码:
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跟踪(最近的呼叫 最后)
在()中 从datetime导入datetime起1个 2 it = hourly_it(datetime(2018,10,2,12),datetime(2018,10,3,12))
----> 3印(next(it))
TypeError:“函数”对象不是迭代器
我知道了。谢谢大家这是不使用生成器的情况下的操作方法。我还应注意,我将+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)
答案 0 :(得分:1)
我几乎可以确定这是您在那里完成的功课。
但是,我将为您提供有关python迭代器协议的一些阅读信息,并且简短而优美的示例也许就可以理解;而且不是火箭科学。
The Iterator Protocol: How “For Loops” Work in Python
>>> from datetime import datetime, timedelta
>>> def hourly_it(start, finish):
... while finish > start:
... start = start + timedelta(hours=1)
... yield start
>>> start = datetime(2018, 10, 2, 12)
>>> finish = datetime(2018, 10, 3, 12)
>>> for hour in hourly_it(start, finish):
... print(hour)
...
2018-10-02 13:00:00
2018-10-02 14:00:00
2018-10-02 15:00:00
2018-10-02 16:00:00
2018-10-02 17:00:00
2018-10-02 18:00:00
2018-10-02 19:00:00
2018-10-02 20:00:00
2018-10-02 21:00:00
2018-10-02 22:00:00
2018-10-02 23:00:00
2018-10-03 00:00:00
2018-10-03 01:00:00
2018-10-03 02:00:00
2018-10-03 03:00:00
2018-10-03 04:00:00
2018-10-03 05:00:00
2018-10-03 06:00:00
2018-10-03 07:00:00
2018-10-03 08:00:00
2018-10-03 09:00:00
2018-10-03 10:00:00
2018-10-03 11:00:00
2018-10-03 12:00:00