python中else子句的不同用法(不是最常见的用法)
6.00x edX中有一个练习,他们提供的答案建议如下:python中else子句的不同用法(不是最常见的用法),python,generator,if-statement,Python,Generator,If Statement,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 els
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
从标识上看,我可以清楚地看到,这与IF无关。我认为这是一个bug,但当我执行时,代码很好,我无法理解发生了什么,这还能做什么?它是在通过列表执行
for
循环时执行的。但是,在你的例子中。如果<代码>中断<代码>被调用,则<代码> > <代码>将不执行。> <代码>代码>另一个代码>循环< <代码> >当< <代码> for循环<代码>成功运行时,代码< >迭代< < /代码> >
因此,在你的例子中:-
if last % p == 0:
break
如果for循环中的上述
if条件在某个迭代中变为true,它将中断for循环,在这种情况下,else将不会执行。我猜如果for循环没有运行一次,例如ifprimes=[]
,则执行else
子句。