(标答出处: 鱼C论坛)
《零基础入门学习Python》
本节知识点:
(1)generator 是用来产生一系列值的
(2)yield 则像是 generator 函数的返回结果
(3)yield 唯一所做的另一件事就是保存一个 generator 函数的状态
(4)generator 就是一个特殊类型的迭代器(iterator)
(5)和迭代器相似,我们可以通过使用 next() 来从 generator 中获取下一个值
(6)通过隐式地调用 next() 来忽略一些值
测试题:
答:通常函数从第一行代码开始执行,到函数的结束,或者 return ,或者出现异常 结束。
答:将 return 语句 改为 yield 语句 。
答:生成器(以及 yield 语句)最初的引入是为了让程序员可以更简单的编写用来产生值的序列的代码。 以前,要实现类似随机数生成器的东西,需要实现一个类或者一个模块,在生成数据的同时保持对每次调用之间状态的跟踪。而且,如果函数不是一次性返回全部的值,那么我们就不需要用列表来存数据,这就意味着消耗的内存将大大的减少。
答:while 循环是用来确保生成器函数永远也不会执行到函数末尾的。
动动手:
def myRev (seq) :
for index in range ( len(seq)-1 , -1 , -1 ) :
yield seq[index]
for i in myRev("xmy") :
print (i,end = '')
运行结果:
import math
def isprime (num) :
if num > 1 :
if num == 2 :
return True
if num %2 == 0:
return False
for currect in range (3,int(math.sqrt(num)+1),2):
if num % currect == 0:
return False
return True
def getprime (num) :
while True:
if isprime(num) :
yield num
num += 1
def slove () :
total = 2
for nextprime in getprime(3) :
if nextprime < 2000000 :
total += nextprime
else :
print (total)
return
slove()
运行结果: