我在python中学习生成器,这里的函数:
import math
def is_primes(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_primes1(number):
while True:
if is_primes(number):
yield number
number +=1
def get_primes2(number):
while True:
if is_primes(number):
number=yield number
number +=1
使用发送功能时:
a=get_primes1(2)
b=get_primes2(2)
a.send(None)#return 2
b.send(None)#return 2
a.send(1)#return 3,the parameter in send() looks useless.
b.send(1)#return 1,normal
当重复使用“a.send(1)”和“b.send(1)”时,a.send(1)返回较大的值,但b.send(1)仍然返回相同的值 . 为什么有区别?
我检查发送功能的含义:
恢复执行并向发送器函数“发送”一个值 . value参数成为当前yieldexpression的结果 . send()方法返回生成器产生的下一个值,如果生成器退出而不产生另一个值,则引发StopIteration . 当调用send()来启动生成器时,必须使用None作为参数调用它,因为没有可以接收该值的yield表达式 .
1 回答
见PEP 342
因为您反复将
number
重置为send()的参数值: