Самая большая проблема здесь в том, что вам нужен какой-то итератор, который начинается с 1 и идет до бесконечности. К счастью, itertools
предоставляет один. Мы можем использовать его для создания генератора:
import itertools
...
primeGen = (n for n in itertools.count(start=2, step=1) if isPrime(n))
type(primeGen) # <class 'generator'>
# do not do the following:
for i in primeGen:
print(i)
# this continues infinitely
, который будет последовательно выводить простые числа в последовательности.
Обратите внимание, что я использую ()
здесь вместо []
. Нам нужен генератор, а не понимание списка - использование квадратных скобок заморозит программу, потому что она пытается построить список весь до его возвращения, и бесконечности нет конца. Использование ()
возвращает генератор вместо списка, что нормально.