尝试 return 'datetime.date' 而不是使用 yield

Trying to return 'datetime.date' instead using yield

我有这个功能。它 return 范围从今天算起,但我需要使用这个结果两次。如果我用 'return' 替换 '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)

而不是 'fix' 函数,将函数的结果转换为列表:

dates = list(date_range())

然后 list() 函数遍历生成器函数产生的所有结果,并从中构建一个列表对象。然后,您可以根据需要多次迭代该列表对象。

另一种方法是将函数转换为 return 列表,而不是一个一个地生成日期对象:

def date_range():
    start_date = datetime.date.today()
    return [start_date + timedelta(n) for n in range(11)]

这使用列表理解从同一个循环中生成整个列表。请注意,end_date 计算完全是多余的,因为您随后返回到时间增量甚至是整数天!

同样,你的生成器函数版本可以简化为:

def date_range():
    start_date = datetime.date.today()
    for n in range(11):
        yield start_date + timedelta(n)