10.生成器和迭代器
# 01.生成器
# 1.1 什么是生成器?(What)
- 生成器就是一个特殊的迭代器
- 一个有yield关键字的函数就是一个生成器
- 生成器是这样一个函数,它记住上一次返回时在函数体中的位置。
- 对生成器函数的第二次(或第 n 次)调用跳转至该函数中间,而上次调用的所有局部变量都保持不变。
def test():
yield 1
print('aaaa')
yield 2
print('bbb')
r1 = test()
r1.__next__()
r1.__next__()
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 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
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 1.3 为什么使用生成器
- 节省空间
- 高效
# 02.迭代器
# 2.1 什么是迭代器(W)
- 迭代器是访问集合内元素的一种方法
- 总是从集合内第一个元素访问,直到所有元素都被访问过结束,当调用 __next__而元素返回会引发一个,StopIteration异常
- 有两个方法:_iter_ _next_
- _iter_ : 返回迭代器自身
- _next_: 返回下一个元素
上次更新: 2024/10/15 16:27:13