LoginSignup
3
1

More than 3 years have passed since last update.

Python で日付のイテレータを返すジェネレータを利用してループする

Last updated at Posted at 2020-04-05

サンプルコード

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 ドキュメント

ジェネレータは、イテレータを書く作業を簡単にする、特殊な関数です。標準的な関数は値を計算して返しますが、ジェネレータが返すのは、一連の値を返すイテレータです。

組み込み型 — Python 3.8.2 ドキュメント

range 型は、数のイミュータブルなシーケンスを表し、一般に for ループにおいて特定の回数のループに使われます。

datetime --- 基本的な日付型および時間型 — Python 3.8.2 ドキュメント

timedelta オブジェクトは経過時間、すなわち二つの日付や時刻間の差を表します。

3
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1