生成器是特殊的迭代器
a=(i for i in range (10))
a
可以看出,我们产生了一个生成器
然后
next(a)
next(a)
next(a)
或者
for m in a:
print(m)
因为 for 迭代 本质是 next()
函数return 后,或者函数运行到末尾,会结束,所有函数中的数据都会删除,再次调用也是重头开始
而 关键字 yield ,作用相当于 return ,返回值, 但不会使函数结束,相当于让函数暂停在那,再次调用时,会从下一行开始执行
注意 yield 和return 不要一起用
看下面代码
def test():
n=1
while True:
n=yield n
n+=1
for i in test():
print(i)
可以看出第二次进入生成器中,因为上一次的赋值操作还没有进行 ,赋值符右边是next()函数 返回的 None ,所有 n 被赋给了 None的值
由此我们引入 send()函数
作用相当于 发送一个值 到yield 表达式 ,然后next()
单步调试下面代码可理解
def test():
n=1
while True:
n=yield n
n+=1
t=test()
i=next(t)
print(i)
i=t.send(5)
print(i)
参考文章
找素数
设定开始和结束位
mylist=[]
def is_primes(start):
if start<2:
return False
elif start==2:
return True
else :
if not start % 2==0:
for current in range(3,start,2):
if start%current==0:
return False
else:
return True
def get_primes(start,stop):
for n in range(start,stop+1):
if is_primes(n):
yield n
for i in get_primes(1,100):
mylist.append(i)
print(mylist)
文章只是 学习笔记,不是专门教程 望谅解