I'm trying to learn send method for generators but i'm confused about its functionality. Below is the code . I want to understand why do we need to initialize generator by passing 'None' value or using next method (print_successive_primes)--Both give same result? But if i normally use generator (in case solve_number_10) i just simply pass argument and generator initializes itself.
i've read this answer here python generator "send" function purpose?
but it doesn't clear my doubt
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