尝试 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)
我有这个功能。它 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)