python生成器

python生成器

什么是生成器?

? 通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。

? 所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。

创建生成器

要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator:

ls=[i for i in range(10)]
lm=(i for i in range(10))
print(type(ls))
print(type(lm))
________________________________
output:
<class 'list'>
<class 'generator'>

可以看到,通过这种方法生成的是一个generator ls可以直接打印出来,但是lm需要调用next()方法来获取下一个值。但是一般我们不会采用next()方法来获取生成器的值,而是利用for循环来获得,还可以避免StopIteration的错误。

另外一种创建生成器的方法是利用yield关键字,在函数里出现yield关键字的时候,该函数就会变成一个生成器。

case:

def func():
    print('first function')
    yield 
    print('second function')
    yield
    print('third function')
    yield
f=func()
next(f)
next(f)
next(f)
_________________________
output:
first function
second function
third function

在执行过程中,我们可以看到,当程序运行到yield就会中断,下次又继续执行。当函数称为生成器时,我们不会用next()方法来取得值,而是利用for循环 同时for还会捕获StopIteration错误。

相关推荐