两个 yield 语句之间的区别
Difference between two yield statements
下面两个生成器函数有什么区别?
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
的工作原理以及它如何设置值和所有内容。
如果您查看 docs,它会显示:
Resumes the execution and “sends” a value into the generator function. The value argument becomes the result of the current yield expression.
这听起来可能有点神秘,换句话说:
使用 send()
生成器在它产生的地方恢复,你发送的值是 yield
returns(并且可以分配给任何变量)。您也可以试试下面的代码:
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)
会return:
1
:我们最初分配给 number
的值
2
:我们做了 send(2)
,这就是 number = yield ...
分配给 number
的内容,然后我们继续,循环回到 print()
并再次让步.
5
:同样的事情,但我们做了 send(5)
。
下面两个生成器函数有什么区别?
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
的工作原理以及它如何设置值和所有内容。
如果您查看 docs,它会显示:
Resumes the execution and “sends” a value into the generator function. The value argument becomes the result of the current yield expression.
这听起来可能有点神秘,换句话说:
使用 send()
生成器在它产生的地方恢复,你发送的值是 yield
returns(并且可以分配给任何变量)。您也可以试试下面的代码:
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)
会return:
1
:我们最初分配给number
的值
2
:我们做了send(2)
,这就是number = yield ...
分配给number
的内容,然后我们继续,循环回到print()
并再次让步.5
:同样的事情,但我们做了send(5)
。