Bạn có thể viết một hàm tạo trả về các đối tượng ngày bắt đầu từ hôm nay:
import datetime
def date_generator():
from_date = datetime.datetime.today()
while True:
yield from_date
from_date = from_date - datetime.timedelta(days=1)
Trình tạo này trả về ngày bắt đầu từ hôm nay và quay ngược từng ngày một. Dưới đây là cách thực hiện 3 ngày đầu tiên:
>>> 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)]
Ưu điểm của phương pháp này so với việc hiểu vòng lặp hoặc danh sách là bạn có thể quay lại bao nhiêu lần tùy ý.
Biên tập
Một phiên bản nhỏ gọn hơn sử dụng biểu thức trình tạo thay vì hàm:
date_generator = (datetime.datetime.today() - datetime.timedelta(days=i) for i in itertools.count())
Sử dụng:
>>> 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)]