首页 > 编程语言 > 详细

Python学习-生成器

时间:2017-01-19 21:05:44      阅读:194      评论:0      收藏:0      [点我收藏+]

yield的使用

在python中,当你定义一个函数,使用了yield关键字时,这个函数就是一个生成器,它的执行会和其他普通的函数有很多不同,函数返回的是一个对象,而不是你平常 所用return语句那样,能得到结果值。如果想取得值,那得调用next()函数,如:

c = h() #h()包含了yield关键字
#返回值
c.next()

每当调用一次迭代器的next函数,生成器函数运行到yield之处,返回yield后面的值且在这个地方暂停,所有的状态都会被保持住,直到下次next函数被调用,或者碰到异常循环退出(也就是说,yield一般是放在循环里面的)。

def fib(max):
    a, b = 1, 1
    while a < max:
        yield a #generators return an iterator that returns a stream of values.
        a, b = b, a+b

程序运行:

for n in fib(15):
    print n

 

yield其他例子展示:排列,组合

#生成全排列    

def perm(items, n = None):
    if n is None:
        n = len(items)
    for i in range(len(items)):
        v = items[i:i+1]
        if n==1:
            yield v
        else:
            rest = items[:i] + items[i+1:]
            for p in perm(rest, n-1):
                yield v + p
def comb(items, n
= None): if n is None: n = len(items) else: for i in range(len(items)): v = items[i:i+1] if 1 == n: yield v else: rest = items[i+1:] for c in comb(rest, n-1): yield v + c

上面这两个例子写的真好

 

 

 

Python学习-生成器

原文:http://www.cnblogs.com/charlesblc/p/6308575.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!