两个yield语句之间的差异

问题描述 投票:0回答:1

以下两个生成器函数之间有什么区别?

def get_primes(number):
    while True:
        if is_prime(number):
            number = yield number
        number += 1

和:

def get_primes(number):
    while True:
        if is_prime(number):
            yield number
        number += 1

据我了解,我可以称呼他们为:

p = get_primes(0)

# first call works for both
next(p) # or p.send(None)

# second call different for both
next(p)    # works for second way only
p.send(14) # works for first way only

[我认为我的问题是我不太了解send的工作原理以及它如何设置值和全部。

python python-3.x generator yield
1个回答
1
投票

如果签出docs,它会说:

恢复执行并将值“发送”到生成器函数。 value参数成为当前yield表达式的结果。

这听起来有点神秘,所以换句话说:

使用send(),生成器将从产生的位置恢复,并且您发送的值就是yield返回的值(可以分配给任何变量)。您也可以尝试以下代码:

def get_num():
    number = 1
    while True:
        print(number)
        number = yield number

g = get_num()
g.send(None)  # haven't yielded yet, cannot send a value to it
g.send(2)
g.send(5)

它将返回:

  • 1:我们最初分配给number的值>
  • 2:我们做了send(2),这就是number = yield ...分配给number的内容,然后我们继续,循环回到print()并再次屈服。
  • 5:一样,但是我们做了send(5)
© www.soinside.com 2019 - 2024. All rights reserved.