我有这个功能。它从今天返回范围日期,但我需要使用此结果两次。如果我更换' yield'与'返回'我得到了TypeError: 'datetime.date' object is not iterable
def date_range():
start_date = datetime.date.today()
end_date = start_date + datetime.timedelta(days=11)
for n in range(int((end_date - start_date).days)):
yield start_date + timedelta(n)
答案 0 :(得分:4)
不是“修复”函数,而是将函数的结果转换为列表:
dates = list(date_range())
然后,list()
函数迭代生成器函数生成的所有结果,并从中构建一个列表对象。然后,您可以根据需要多次迭代该列表对象。
替代方法是将函数转换为返回列表而不是逐个生成日期对象:
def date_range():
start_date = datetime.date.today()
return [start_date + timedelta(n) for n in range(11)]
这使用列表推导来从同一个循环生成整个列表。请注意,end_date
计算完全是多余的,因为您返回到timedelta甚至是整数天!
同样,您的生成器功能版本可以简化为:
def date_range():
start_date = datetime.date.today()
for n in range(11):
yield start_date + timedelta(n)