Vous pouvez écrire une fonction de générateur qui renvoie des objets de date à partir d'aujourd'hui:
import datetime
def date_generator():
from_date = datetime.datetime.today()
while True:
yield from_date
from_date = from_date - datetime.timedelta(days=1)
Ce générateur renvoie des dates commençant à partir d'aujourd'hui et remontant un jour à la fois. Voici comment prendre les 3 premières dates:
>>> import itertools
>>> dates = itertools.islice(date_generator(), 3)
>>> list(dates)
[datetime.datetime(2009, 6, 14, 19, 12, 21, 703890), datetime.datetime(2009, 6, 13, 19, 12, 21, 703890), datetime.datetime(2009, 6, 12, 19, 12, 21, 703890)]
L'avantage de cette approche sur la compréhension d'une boucle ou d'une liste est que vous pouvez revenir en arrière autant de fois que vous le souhaitez.
Éditer
Une version plus compacte utilisant une expression de générateur au lieu d'une fonction:
date_generator = (datetime.datetime.today() - datetime.timedelta(days=i) for i in itertools.count())
Usage:
>>> dates = itertools.islice(date_generator, 3)
>>> list(dates)
[datetime.datetime(2009, 6, 15, 1, 32, 37, 286765), datetime.datetime(2009, 6, 14, 1, 32, 37, 286836), datetime.datetime(2009, 6, 13, 1, 32, 37, 286859)]