一、迭代器、生成器
迭代器
- 迭代器:一个可迭代对象,不放回
- 迭代器定义
- 是一个容器型数据,支持遍历和转列表
- 一种特殊专门为了遍历而建立的数据类型
- 迭代器特性:
- 打印一个迭代器,看不到元素(print)
- 迭代器无法获取元素个数(len)
- 如果想要使用迭代中的元素,必须将元素从迭代器中取出(遍历)
- 而且在取的时候,只能自上而下取数,且取一个少一个,取出来的数据无法再放回(无放回)
- 迭代器的功能:利用其不放回的特性,进行实际生活中的应用
- 迭代器操作
- 创建迭代器:
- 用iter()直接转
- 创立生成器
- 迭代器的查:
-
获取单个元素(获取最上层元素):next(迭代器)
- li = ‘abc’
- print(next(li)) -> ‘a’
- print(next(li)) -> ‘b’
-
遍历:for循环
-
转化成列表:list(),用完list构造器后,原迭代器也会被取完
-
- 创建迭代器:
生成器
生成器:一个生成指定个数,指定数值的算法,yield
- 生成器定义:
- 是容器型数据类型,不是存储数据,而是储存能够自动生成数据的算法,来节省空间。
- 特性和取数操作和迭代器一样,只有底层的数据储存原理不一样和创建方法不一样
- 生成器特性:
- 打印无法看到元素(print)
- 无法看到元素的个数(len)
- 用的时候要使用生成器的数据,遍历(for)
- 取一个少一个(无放回)
- 生成器的功能:1.节省内存。2.利用yield特性,进行处理
- 迭代器操作:
- 创建生成器:不是数据本身,而是创建产生数据的算法(自定义函数)
- 函数中加入yield的特殊性:
- 单行写入yield就行,只要有yield就会变成生成器
- 此时调用函数,不会返回return值,会返回一个生成器对象
- 写法:
- 数据个数:生成器创建数据的个数和数据的值,由执行函数体时,遇到几次yield,就会生成多少个数据
- 数据的值:yield后面的值是什么,元素的值就是什么。相当于return。
- 常见用法:
- def func(subject):
- for i in range(1,100):
-
yield f'{subject}{x:0>3}'
- gen = func(‘Python’)
- for i in gen:
-
print(i)
- 输出值是:’python001‘到’python099‘
- 函数中加入yield的特殊性:
- 生成器的查:和迭代器一样
- 创建生成器:不是数据本身,而是创建产生数据的算法(自定义函数)
- 生成器产生数据的原理
- yield:只有在遍历时会执行函数;会分隔函数;且标记,下次从上次的位置开始运行
- 调用函数,进行传参的时候,不执行函数体。
- 只有当在获取该生成器对象中元素的时候,才会调用函数体。
- 每次执行函数体:从开始执行到一个yield停下,将yield后面的数据作为获取到的元素。
- 下次执行:接着上次的地方接着执行。