Python 開発者として、私は最近、コード内のループが期待どおりに反復されないという奇妙な問題に遭遇しました。日付範囲のリストを反復処理して、タイムスタンプが範囲内にあるかどうかを確認する関数がありました。
私のコードは次のようになりました。
def check_timestamp(timestamp):
date_ranges = generate_ranges()
for range in date_ranges:
print("First loop")
for range in date_ranges:
print("Second loop")
def generate_ranges():
return (
{'start': date1, 'end': date2}
for date1, date2 in zip(start_dates, end_dates)
)
いくつかのデバッグの後、ジェネレーター式の代わりにリストを返すように generate_ranges()
を変更すると問題がなくなることに気付きました。
def generate_ranges():
return [
{'start': date1, 'end': date2}
for date1, date2 in zip(start_dates, end_dates)
]
ジェネレーター式により、ループ間で予期しない動作が発生していたようです。評価を強制的にリスト化することで、この奇妙さを解決しました。
したがって、Python コード内のループが期待どおりに反復されない場合は、微妙なバグを引き起こしている可能性のあるジェネレーター式がないか確認してください。それらを標準のリスト/タプルに変換すると、イテレータの問題を除外する簡単な方法になります。
他にご質問がございましたら、お知らせください。