试图返回' datetime.date'而是使用产量

时间:2015-06-12 08:48:33

标签: python date generator python-datetime

我有这个功能。它从今天返回范围日期,但我需要使用此结果两次。如果我更换' 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)

1 个答案:

答案 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)