为什么此While语句末尾的递增器不会触发

时间:2012-03-15 22:32:32

标签: python

我想在while循环中嵌入for语句。但是,在以下示例中,变量d在完成for语句后不会增加一天。我通过在屏幕上打印来确定这一点。

while d <= end:
    for row in reader:
        rowDate = datetime.datetime.strptime(row[0], "%m/%d/%Y")
        if row[1] == offer and rowDate == d:
            rowList.append("1")
    d += datetime.timedelta(days=1)

当我按如下方式缩进增量器时,它会执行。但这不是理想的结果,因为我不希望它在for语句的每次迭代时递增。

while d <= end:
    for row in reader:
        rowDate = datetime.datetime.strptime(row[0], "%m/%d/%Y")
        if row[1] == offer and rowDate == d:
            rowList.append("1")
        d += datetime.timedelta(days=1)

我可能无法掌握Python的一些基本内容。有人可以解释为什么d在第二个例子中增加但不在第一个例子中增加吗?

1 个答案:

答案 0 :(得分:2)

csv.reader返回一个生成器。一旦你完成它,就会被消耗掉。您无法重复两次而无需重新实例化它。那是因为通常你不需要多次重复它。您可以像这样重写代码:

for row in reader:
    rowDate = datetime.datetime.strptime(row[0], "%m/%d/%Y")
    if row[1] == offer and start_date<=rowDate<=end_date:
        # start_date and end_date are datetime objects
        rowList.append("1")