Даниэль уже указал, что вы создаете новый генератор каждый раз через свой цикл. Более обычным является обход цикла генератора или его использование другим генератором, чем явный вызов next()
каждый раз.
Вот как вы можете зациклить островок () вашего генератора.
from itertools import islice
import datetime
#generator 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 the_date in islice(gettime(nextdate),0,25):
print the_date
Вы также можете упростить это до выражения генератора, если хотите
from itertools import islice, count
import datetime
#initialize a datetime object
nextdate = datetime.datetime(2011, 8, 22, 11,0,0,0)
#generator expression that continually adds 15 minutes to a datetime object
gettime = (nextdate+datetime.timedelta(minutes=15*i) for i in count())
#call gettime function 25 times.
for the_date in islice(gettime,0,25):
print the_date