01 迭代器
1. 什么是迭代器(iter)
-
容器型数据类型;
-
迭代器作为容器打印的时候无法显示元素;
-
无法通过len获取迭代器中元素的个数。
-
如果要使用迭代器中的元素必须将元素从迭代器中取出来,而且一旦取出就无法再放回去。
2. 怎么创建迭代器
1) 将其他序列转换成迭代器
2) 创建生成器
i1 = iter('abc')
i2 = iter([10, 20, 30, 40])
print(i1)
print(i2)
# print(len(i1)) # 报错!
3.怎么获取迭代器中的元素
- 注意: 不管以什么样的方式获取到了迭代器中的元素,对应的元素一定会从迭代器中消失
1) 查单个: next(迭代器)
print(next(i1)) # a
print(next(i1)) # b
print(next(i1)) # c
# print(next(i1)) # 报错! StopIteration
2) 遍历
for i in i2:
print(f'i:{i}')
i3 = iter('hello')
print(i3)
print(list(i3))
# print(next(i3)) # StopIteration
02 生成器
1.什么是生成器
- 容器型数据类型(生成器作为容器不具备同时保存多个数据的能力,具备的是创建多个数据的能力)
- 打印生成器也无法查看生成器中的元素;生成器无法统计个数;
- 获取生成器中的元素,也是取一个就少一个。(生成器获取元素的方式和迭代器一样)
2.怎么创建生成器
调用带有yield关键字的函数就可以得到一个生成器
def func1():
print('abc')
yield
return 100
result = func1()
print(f'result:{result}')
3.生成器的元素 - 控制生成器产生数据的个数和产生的值
执行创建生成器的函数的函数遇到几次yield,对应的生成器就可以创建多少个数据
每次遇到yield的时候,yield后面的数据就是这个生成器能够创建的值
def func2():
for x in range(5):
yield x*2
g2 = func2()
for x in g2:
print('=====', x)
def func3():
print('========1=========')
yield 100
print('========2=========')
yield 200
print('========3=========')
yield 300
g3 = func3()
print(next(g3))
print('------------------------------------------华丽的分割线------------------------------------------------')
s = 0
for x in range(100):
s += x
print(s)
print(next(g3))