Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中else子句的不同用法(不是最常见的用法)_Python_Generator_If Statement - Fatal编程技术网

python中else子句的不同用法(不是最常见的用法)

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

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

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

它是在通过列表执行
for
循环时执行的。但是,在你的例子中。如果<代码>中断<代码>被调用,则<代码> > <代码>将不执行。 <代码>代码>另一个代码>循环< <代码> >当< <代码> for循环<代码>成功运行时,代码< >迭代< < /代码> >

因此,在你的例子中:-

if last % p == 0:
      break

如果for循环中的上述
if条件在某个迭代中变为true,它将中断for循环,在这种情况下,else将不会执行。

我猜如果for循环没有运行一次,例如if
primes=[]
,则执行
else
子句。