码迷,mamicode.com
首页 > 编程语言 > 详细

Python3 生成器

时间:2018-02-10 20:07:40      阅读:235      评论:0      收藏:0      [点我收藏+]

标签:erro   otl   yield   怎样   sed   blog   执行   span   位置   

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
    
        
    

 

Python3 生成器

标签:erro   otl   yield   怎样   sed   blog   执行   span   位置   

原文地址:https://www.cnblogs.com/PythonFCG/p/8439429.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!