#python #generator #primes
Вопрос:
Я изучаю генераторы на python. Я следую коду из https://jakevdp.github.io/WhirlwindTourOfPython/12-generators.html но совершенно сбитая с толку программой , когда n=2
, в чем именно заключается результат all(n % p > 0 for p in primes)
? Насколько я понимаю, первый раунд цикла primes
пуст. Так почему же выражение истинно и добавляется 2
к набору?
def gen_primes(N):
"""Generate primes up to N"""
primes = set()
for n in range(2, N):
if all(n % p > 0 for p in primes):
primes.add(n)
yield n
print(*gen_primes(100))
Ответ №1:
Из документации all()
:
Возвращает
True
, если все элементы итерируемого значения являются истинными (или если итерируемое значение пусто).
Поэтому, когда primes
пусто, n % p > 0 for p in primes
пусто, потому что нечего повторять. Поэтому all()
возвращается True
и n
добавляется primes
.
Комментарии:
1. В чем же результат
2 % p >0
?2.
2 % p
это остаток, когда2
делится наp
. Если2
кратноp
, то остаток равен0
, в противном случае он больше, чем0
. Таким образом, это говорит вам, кратно ли2
p
.3. Простое число-это число, которое не кратно никаким другим простым числам.
4. Чего я не понимаю, так это в чем ценность
p
? Набор пуст, поэтомуp
предполагается, что это не число, выражение в первом цикле2`%None
или что?5. Когда набор пуст, его нет
p
.