python(16)——生成器

#生成器(generator):Python中一边循环一边计算出元素的机制,称之为生成器

#通过圆括号编写生成器推导式
g = (x * x for x in range(1,4))
print(g)

#next()函数  获取生成器的下一个元素 ,后面没有元素时,弹出错误StopIteration
result = next(g)
print(result)
result = next(g)
print(result)
result = next(g)
print(result)
#result = next(g)
#print(result)
#for循环进行遍历
for i in g:
    print(i)

#使用yield返回的函数会变成一个生成器
#调用生成器的过程中,遇到yield时函数会暂停并保存当前所有的运行信息,返回yield值
#在下一次执行next()方法时从当前位置运行

#斐波那契函数
def fibonacci(max):
    a=0
    b=1
    n=0
    while n < max:
        yield a #yield让函数变成一个生成器
        a,b = b,a+b

        n+=1
#调用函数
fib=fibonacci(5) #生成器类
print(type(fib))

#遍历生成器
for i in fib:
    print(i)

#列表打印斐波那契函数
def fib(max):
    a=0
    b=1
    n=0
    while n < max:
        print(a)
        a,b=b,a+b#赋值语句,同时赋值
        n+=1
    return 'done'
#调用
fib(5)
#每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行
#定义一个generator,依次返回1,3,5:
def odd():
    print('step1')
    yield 1
    print('step2')
    yield (3)
    print('step3')
    yield (5)
#调用生成器对象,用next()获取下一个返回值
G=odd()
result=next(G)
#print(result)
result=next(G)
#print(result)
result=next(G)
#print(result)


g=fibonacci(6)
while True:
    try:
        x=next(g)
        print('g:',x)
    except StopIteration as e:
        print('generator return value:',e.value)
        break

 

posted on 2018-01-21 14:45  纵情狂飞  阅读(146)  评论(0编辑  收藏  举报