首页 > 解决方案 > 为什么在 python 的 send 方法中我们需要“启动”一个生成器,而在普通方法中我们不需要这样做?

问题描述

我正在尝试学习生成器的发送方法,但我对它的功能感到困惑。下面是代码。我想了解为什么我们需要通过传递“无”值或使用下一个方法(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

标签: pythongeneratorsend

解决方案


推荐阅读