1.生成器的定义
在python中,一边循环一边计算的机制,称为生成器:generator
2.为什么要有生成器
列表所有数据都在内存中,如果有海量数据的话将会非常耗内存。如仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。如果列表元素按照某种算法推算出来,那我们就可以在循环的过程中不断推算出后续的元素,这样就不必创建完整的list,从而节省大量的空间。简单一句话:想要的到庞大的数据,又想让它占用空间少,那就用生成器
3.生成器的创建
a.只需要将列表生成器的[]改成()就创建了一个generator
a = [x for x in range(10)] b = (x for x in range(10)) print("a的类型为:",type(a)) print("b的类型为:",type(b)) #generator的调用方式 #第一种方式 print(b.__next__()) #第二种方式 print(next(b)) b.一个函数中包含yield关键字,那么这个函数就不再是一个普通的函数,而是一个generator。调用函数就是创建了一个生成器对象
def fib(max): n, a, b = 0, 0, 1 while n < max: a, b = b, a + b n = n + 1 print(a) return 'done' a = fib(10) print(fib(10))
4.生成器的工作原理
a.生成器能够迭代的关键是它有一个next()方法,工作原理就是通过重复调用next()方法,直到捕获一