1、协同程序
协同程序就是指一个函数可以暂时挂起,并在需要的时候回到程序离开的地方继续执行
2、怎样将一个函数变为生成器
一般函数结束于return语句、异常或者函数语句全部执行完毕,结束时数据全部丢失,再次使用函数得从头再来
可以用yield语句 取代return语句,从而函数改造成生成器,是再次需要该函数的时候可以回到离开的地方继续执行
def get_primes(number): while True: if is_prime(number): yield number number += 1
这是一个素数的生成器
while True:的作用是使函数不会执行到最后
例子:
用生成器实现reversed()功能
def myRev(data): # 这里用 range 生成 data 的倒序索引 # 注意,range 的结束位置是不包含的 for index in range(len(data)-1, -1, -1): yield data[index]
def MyRev(seq): index=-1 print("到这") while True: try: yield seq[index] print("循环内") index-=1 except IndexError: return StopIteration
就算2000000以内的素数之和
mport math def get_prime(number): while True: if is_prime(number): yield number number+=1 def is_prime(num): if num>1: if num == 2: return num else: for i in range(3,int(math.sqrt(num) + 1),2): if num%i==0: return False return True return False totle=0 for i in get_prime(1): if i<2000000: print(i) totle+=i else: break