生成器介绍 分类: python 小练习 python基础学习 divide into python 2013-12-31 21:17 226人阅读 评论(0) 收藏

dive into python P345
  1. 函数中出现关键字yield,则它是一种每次生成一个值特殊函数调用它会返回一个生成器对象,它可以返回x的连续值
  2. 调用含有yield关键字的函数,即可创建一个生成器的实例
  3. 不断调用生成器对象的next()方法将从你上次离开的位置重新开始,并继续下去,直到又遇到yield语句。

#coding:utf-8
--使用生成器,返回小于n的元素值,myield函数返回一个生成器对象
def myyiled(n):
    a,b=0,1
    while a<n:
        yield a
        a,b=a+b,a
--使用生成器,返回前n项的元素值,my函数返回一个生成器对象
def my(n):
    a,b=0,1
    for i in range(n):
        yield a
        a,b=a+b,a

if __name__=="__main__":
    for i in myyiled(10):
        print i,   # 0 1 1 2 3 5 8 

    print

    for i in my(10):
        print i,  # 0 1 1 2 3 5 8 13 21 34



def make_counter(x):
    print 'entering make_counter function'
    while 1:
        yield x
        print 'incrementing x'
        x+=1

if __name__ == '__main__':

    #返回一个生成器对象
    counter = make_counter(2)
    #调用生成器对象的next方法
    print counter.next() # 2
    print counter.next() # 3


或输出10项:

def main(n):
    while 1:
        yield n
        n+=1

if __name__ == '__main__':
    m = main(0)
    for i in range(10):
        print m.next(),  # 结果:0 1 2 3 4 5 6 7 8 9

# for循环将会创建一个生成器对象并连续调用其next方法获得值并赋予循环变量i,如下

def main(x):
    print 'entering main'
    while x:
        yield x
        x-=1

if __name__ == '__main__':
    #调用main函数,返回一个生成器对象
    for i in main(10):
        print i,


版权声明:本文为博主原创文章,未经博主允许不得转载。

原文地址:https://www.cnblogs.com/think1988/p/4627978.html