Python Generator返回停止迭代?

Val*_*dar 2 python primes generator

我无法弄清楚为什么输出结果如下:

>  File "<pyshell#177>", line 6, in func
>     list.append(next(PrimeGen)) 
>  StopIteration
Run Code Online (Sandbox Code Playgroud)

当它在我的脑海中变得如此有意义!! 无论如何基本上我正在尝试使用ifprime函数和生成器来生成一个Prime Generator来收集列表中的素数.

这确定是否为prime并返回值,否则为空.

def prime(x):
    if (2**(x-1))%x ==1:
        return x
Run Code Online (Sandbox Code Playgroud)

这使得生成器应该返回一个列满了素数的列表,最多为x但是却给出了上面的错误.我开始列表里面有一个2,因为上面的函数prime(x)不认为2作为素数(所以范围从3开始)

def func(x):
  count=0
  list=[2]
  PrimeGen = (prime(X) for X in range(3,x+1))
  while count<99:
      list.append(next(PrimeGen))
      count+=1
  print list
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释为什么它不起作用?先感谢您!V.

Ign*_*ams 5

产生的值少于99个.使用itertools.islice()而不是循环.