作为一名 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 代码中的循环未按预期进行迭代,请检查是否有任何可能引入细微错误的生成器表达式。将它们转换为标准列表/元组是排除迭代器问题的简单方法。
如果您还有其他问题,请告诉我!