迭代器
1.什么是迭代器?
不依赖于索引的取值方式
迭代是一个重复的过程,即每一次重复为一次迭代,并且每次迭代的结果都是下一次迭代的初始值
示例:
str1 = 'abcde'
count = 0
while count<len(str1)
print(str1[count])
count+=1
2.什么是可迭代对象?什么是迭代器对象?
#可迭代对象指的是内置有.__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__()
#总结:
迭代器对象一定是可迭代对象,而可迭代对象不一定是迭代器对象
生成器
- 函数中有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:untitleda.txt','r') as f:
for i in back(f,splitter = '|'):
print(i)