码迷,mamicode.com
首页 > 其他好文 > 详细

生成器

时间:2015-09-08 18:28:45      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:

生成器是generator,就是指带有关键字yield的函数。

它与一般函数不同点在于:

  1、函数调用返回迭代子iterator,迭代子可以理解为一系列的值

>>> def func():
...     yield 1
...
>>> a = func()
>>> a
<generator object func at 0x01786918>

  2、迭代子每次只能拿到一个值,若想拿下一个值,通过调用next;对于for循环,next是被隐式调用

  3、每次调用next是从上一个yield处开始执行,而且现场环境是和上一次相同

相同点在于:

  1、yield类似return

 

应用场景:

由于生成器产生值的方法是每次只产生一个,不停调用next,才会继续产生后面的。所以,它特别适用于产生一系列数量非常多的值。

  1、配合while True之类的,可以产生无限个数

def get_primes(number):
    while True:
        if is_prime(number):
            yield number
        number += 1

  2、配合阻塞函数,可以产生停动停动的模型

def func():
    xx.read(block=True)
    .......
    yield n

for i in func():
    .......

 

参考:https://www.jeffknupp.com/blog/2013/04/07/improve-your-python-yield-and-generators-explained/

 

生成器

标签:

原文地址:http://www.cnblogs.com/johnchow/p/4792362.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!