【发布时间】:2020-06-12 02:37:41
【问题描述】:
以下两个生成器函数有什么区别?
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 的工作原理以及它如何设置值等等。
【问题讨论】:
-
第一个允许您为
number设置一个新值send,如果不这样做,则失败。如果您在不发送值的情况下调用next,则number将是None,然后number += 1会引发 TypeError。 -
@kaya3:虽然它可以通过接受不同的名称来相当容易地工作,并且只有在发送的值不是
None时才将其移动到number。
标签: python python-3.x generator yield