Я пытаюсь изучить метод отправки для генераторов, но я запутался в его функциональности.Ниже приведен код.Я хочу понять, почему мы должны инициализировать генератор, передав значение None или используя следующий метод (print_successive_primes) - оба дают одинаковый результат?Но если я обычно использую генератор (в случае solve_number_10), я просто передаю аргумент и генератор инициализирует себя.
Я прочитал этот ответ здесь Назначение функции отправки генератора Python?
но это не проясняет мои сомнения
import math
def is_prime(number):
if number > 1:
if number == 2:
return True
if number % 2 == 0:
return False
for current in range(3, int(math.sqrt(number) + 1), 2):
if number % current == 0:
return False
return True
return False
def get_primes():
number = yield
#print(number)
while True:
if is_prime(number):
number = yield number
number += 1
def print_successive_primes(iterations, base=10):
prime_generator = get_primes()
#print(next(prime_generator))
print(prime_generator.send(None))
#print(prime_generator.send(12))
for power in range(iterations):
print(prime_generator.send(base ** power))
print_successive_primes(4)
####
def solve_number_10():
# She *is* working on Project Euler #10, I knew it!
total = 2
for next_prime in get_primes(3):
if next_prime < 800000:
total += next_prime
else:
print(total)
return