Python3 生成器

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
    
        
    

 

posted @ 2018-02-10 19:06  消灭猕猴桃  阅读(251)  评论(0编辑  收藏  举报