生成器介绍

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,


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值