【发布时间】:2011-06-10 02:05:25
【问题描述】:
我一定忽略了显而易见的事情,但我终其一生都无法弄清楚为什么这个 yield 语句没有不断地给我一个比前一个晚 15 分钟的新日期时间值。 gettime 函数的行为更像是一个“返回”而不是“产生”的函数。
import datetime
#function that continually adds 15 minutes to a datetime object
def gettime(caldate):
while True:
yield caldate
caldate += datetime.timedelta(minutes=15)
#initialize a datetime object
nextdate = datetime.datetime(2011, 8, 22, 11,0,0,0)
#call gettime function 25 times.
for i in range(0,25):
print gettime(nextdate).next()
#output feels like it should be a series of incrementing datetime values 15 minutes apart.
#in actuality, the same result namely:
#2011-08-22 11:00:00
#happens 25 times.
【问题讨论】:
-
代码中的第一条注释具有误导性。由于您使用关键字
yield这个def块神奇地变成了一个生成器而不是一个函数,所以您可能希望将第一个单词更改为“生成器”