python--可迭代对象、迭代器和生成器
迭代器
什么是迭代器?
- 不依赖于索引的取值方式
- 迭代是一个重复的过程,即每一次重复遍历为一次迭代,并且每次迭代的结果都是下一次迭代的初始值
示例:
str1 = 'abcde'
count = 0
while count<len(str1)
print(str1[count])
count+=1
什么是可迭代对象?什么是迭代器对象?
#可迭代对象指的是内置有.__iter__方法的对象
'world'.__iter__
(4,5,6).__iter__
[1,2,3].__iter__
{'a':1}.__iter__
{'a','b'}.__iter__
open('a.txt').__iter__
#什么是迭代器对象?
可迭代对象执行obj.__iter__()得到的结果就是迭代器对象
而迭代器对象指的是即内置有__iter__又内置有__next__方法的对象
#文件类型是迭代器对象
open('a.txt').__iter__()
open('a.txt').__next__()
#总结:
迭代器对象一定是可迭代对象,而可迭代对象不一定是迭代器对象
生成器
- 生成器一种特殊的迭代器;
- 生成器只能遍历一遍
- 生成器也是使用 def 定义函数,但是,使用yield而不是return语句返回结果。yield语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次从它离开的地方继续执行
- 生成器内存id变为:例 <generator object Myread at 0x0000005BBF31F728>
生成器的应用
#将文件中的一行内容以指定的分隔符,分行打印,不用同时加载整行内容,节省内存
def back (f,splitter):
str = ''
while True:
while splitter in str:
num = str.index(splitter)
yield str[:num]
str = str[num+len(splitter):]
newread = f.read(100)
if not newread:
yield str
break
str = str + newread
with open(r'D:\untitled\a.txt','r') as f:
for i in back(f,splitter = '|'):
print(i)