深入学习python的yield和generator
|
前言 什么是生成器 1)、生成器函数:也是用def来定义,利用关键字yield一次返回一个结果,阻塞,重新开始 1、生成器函数 # codes def create_counter(n): print "create counter" while True: yield n print 'increment n' n += 1 cnt = create_counter(2) print cnt print next(cnt) print next(cnt) # output <generator object create_counter at 0x0000000001D141B0> create counter 2 increment n 3 分析一下这个例子:
为了更加深刻的理解,我们再举一个例子。 #coding def cube(n): for i in range(n): yield i ** 3 for i in cube(5): print i #output 0 1 8 27 64 所以从理解函数的角度出发我们可以将yield类比为return,但是功能确实完全不同,在for循环中,会自动遵循迭代规则,每次调用next()函数,所以上面的结果不难理解。 2、生成器表达式 >>> # 列表解析生成列表 >>> [ x ** 3 for x in range(5)] [0,1,8,27,64] >>> >>> # 生成器表达式 >>> (x ** 3 for x in range(5)) <generator object <genexpr> at 0x000000000315F678> >>> # 两者之间转换 >>> list(x ** 3 for x in range(5)) [0,64] 就操作而言,生成器表如果使用大量的next()函数会显得十分不方便,for循环会自动出发next函数,所以可以按下面方式使用:
>>> for n in (x ** 3 for x in range(5)):
print('%s,%s' % (n,n * n))
0,0
1,1
8,64
27,729
64,4096
>>>
两者比较 总结 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
