Зачем нам нужно «запускать» генератор в случае метода send в python, тогда как в обычном методе нам это не нужно? - PullRequest
0 голосов
/ 26 марта 2019

Я пытаюсь изучить метод отправки для генераторов, но я запутался в его функциональности.Ниже приведен код.Я хочу понять, почему мы должны инициализировать генератор, передав значение 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

...