2

6.00x edX中有一个练习,他们提供的答案建议如下:

def genPrimes():
    primes = []   # primes generated so far
    last = 1      # last number tried
    while True:
        last += 1
        for p in primes:
            if last % p == 0:
                break
        else:
            primes.append(last)
            yield last

查看标识,我可以清楚地看到这个 ELSE 与 IF 无关。我认为这是一个错误,但是当我执行时,代码很好,我无法理解发生了什么,ELSE 是做什么的?

4

2 回答 2

4

它在for循环完成遍历列表时执行。但是,在你的例子中。如果break调用了,else则不会执行。

于 2012-11-08T20:57:24.350 回答
3

else执行的一部分for loop,当您for loop成功运行而不breakingiteration.

所以,在你的例子中,: -

if last % p == 0:
      break

如果您的上述if conditionin for 循环在某些迭代中变为真,它将脱离您的 for 循环,在这种情况下您的 else 将不会执行。

于 2012-11-08T20:57:38.350 回答