サンプルコード
from datetime import date, datetime, timedelta
# date オブジェクトのイテレータを返すジェネレータ関数
# 開始日: begin
# 終了日: end
def date_iterator_generator(begin, end):
# 終了日と開始日の timedelta から日数を求める
# 終了日を含むように+1
length = (end - begin).days + 1
# 0から日数分の数値シーケンス
for n in range(length):
yield begin + timedelta(n)
# 開始日・終了日
begin = datetime.strptime('20200331', '%Y%m%d').date()
end = date.today() # 今日の日付
# ジェネレータを生成
gen = date_iterator_generator(begin, end)
print('gen: ' + str(gen))
# 日付を出力
for target in gen:
print(target.strftime('%Y%m%d'))
実行結果
Python 3.8.2 で実行した結果。
gen: <generator object date_iterator_generator at 0x104e0f900>
20200331
20200401
20200402
20200403
20200404
20200405
参考資料
関数型プログラミング HOWTO — Python 3.8.2 ドキュメント
ジェネレータは、イテレータを書く作業を簡単にする、特殊な関数です。標準的な関数は値を計算して返しますが、ジェネレータが返すのは、一連の値を返すイテレータです。
range 型は、数のイミュータブルなシーケンスを表し、一般に for ループにおいて特定の回数のループに使われます。
datetime --- 基本的な日付型および時間型 — Python 3.8.2 ドキュメント
timedelta オブジェクトは経過時間、すなわち二つの日付や時刻間の差を表します。