10.生成器和迭代器

01.生成器

1.1 什么是生成器?(What)

1、生成器就是一个特殊的迭代器
2、一个有yield关键字的函数就是一个生成器
  1、生成器是这样一个函数,它记住上一次返回时在函数体中的位置。
  2、对生成器函数的第二次(或第 n 次)调用跳转至该函数中间,而上次调用的所有局部变量都保持不变。
ef test():
    yield 1
    print('aaaa')
    yield 2
    print('bbb')

r1 = test()

r1.__next__()
r1.__next__()

1.2 生成器哪些场景应用?(Where)

生成器是一个概念,我们平常写代码可能用的并不多,但是python源码大量使用

比如我们tornado框架就是基于 生成器+协程

在我们代码中使用举例

比如我们要生成一百万个数据,如果用生成器非常节省空间,用列表浪费大量空间


import time
t1 = time.time()
g = (i for i in range(100000000))
t2 = time.time()
lst = [i for i in range(100000000)]
t3 = time.time()
print('生成器时间:',t2 - t1)  # 生成器时间: 0.0
print('列表时间:',t3 - t2)    # 列表时间: 5.821957349777222

1.3 为什么使用生成器

1、节省空间
2、高效

02.迭代器

#2.1 什么是迭代器(W)
1、迭代器是访问集合内元素的一种方法
2、总是从集合内第一个元素访问,直到所有元素都被访问过结束,当调用 __next__而元素返回会引发一个,StopIteration异常
3、有两个方法:_iter_ _next_
_iter_ : 返回迭代器自身
_next_: 回下一个元素
posted @ 2021-03-26 19:38  小虾米爱吃鱼  阅读(58)  评论(0编辑  收藏  举报