生成器
在python中,如果进行较大数据的存储,如果直接存储在列表之中,则会可能造成内存的不够,与速度的减慢,因为列表创建完是立即创建并存在的,而在python中生成器(generator)能够很大程度上解决这个问题,生成器并不一开始直接创建所有的数据,而是进行一种"惰性的运算",即创建的时候,我们创建的只是一个生成器的对象,里面记录的是方法,而没有生成数据,可以使用特殊的方法,进行随用随取,并且生成器只能遍历一遍
创建生成器的方法有两种,
一种是:a = (生成式) 如:test = (a for a in range(10))
代码解读:
等号右边表示生成一个生成器,等号表示将右边的生成器赋给等号左边的变量test
另一种是:在函数中使用yield关键字,使用yield的函数将不再是一个不同的函数,而是一个生成器对象
def test():
for i in range(3):
yield i
print(test())
输出结果为:
<generator object test at 0x0000009FA89EAE08> #可能会有所不同,因为运行的环境不同,内存值不一样
获取生成器里面的值
由于生产器的返回的都是一个对象,所以,要想获取里面的值,必须使用特殊的方法next([generator])、generator.__next__()、for循环。以上的三种方法对以上两种创建的生成器都可以使用。
不过需要注意的是,在使用next()与__next__()方法的时候,当生成器里面的内容被取完的时候,如果还进行调用以上两种方法,则会报错:
值得介绍的是for循环的方法,for循环的方法,不管里面的内容有多少个,如果不加以限制的话,都会取到最后一个,而停止不取,防止报错。
#!encoding=utf-8
def test():
for i in range(3):
yield i
for e in