可迭代对象(Iterable):可迭代对象并不是指某种具体的数据类型,它是指存储了元素的一个容器对象,且容器中的元素可以通过__iter__( )方法或__getitem__( )方法访问。常见比如集合数据类型,如list、tuple、dict、set、str等;或生成器(generator)和带yield的生成器函数(generator function)。
迭代器协议:对象需要提供next方法,要么返回下一项,要么引起stopiteration异常,终止迭代。Python中的内置工具(for,sum,min,max等)使用迭代器协议访问对象。
迭代器只能向前不能往后,一个例子说明:
vList=[1,2,3,4]#列表
vIter=iter(vList)#可迭代对象
for i in vIter: print(i)#输出1,2,3,4
for j in vIter: print(j)#无输出,可迭代对象vIter已空
for q in vList: print(q)#可以重复输出1,2,3,4
常见迭代器使用方法举例:
- list迭代器,next用法
l = [1,3,5,7]
it = iter(1) #让l提供一个能访问自己的迭代器
next(it) #1 从迭代器中取值,让迭代器去获取l中的一个元素
next(it) #3
next(it) #5
next(it) #7
next(it) # StopIterable 异常
- 集合迭代器,next用法
s = {'唐僧','悟空','悟能','悟净'}
it = iter(s)
try:
while True:
x = next(it)
print(x)
except StopIteration:
print('遍历结束')
- 文件迭代器-按字节读取
f=open('D:\python_file\data1.txt','r')#以只读模式打开文件对象
while True:
ch=f.read(1) #一次读取一个字符
if not ch:#判断是否为空字符
break
print(ch)#打印
f.close()#关闭文件对象
- 文件迭代器-按行
f=open('D:\python_file\data1.txt','w')#以只写模式打开文件对象
while True:
line=f.readline()
if not line:break
print line
f.close()
- 文件迭代器-全部读取
f=open(filename)
for char in f.read():
print char
f.close()
f=open(filename)
for line in f.readlines():
print line
f.close()
f=open(filename)
for line in f.():
print line
f.close()
- 文件迭代器-fileinput组件
import fileinput
for line in fileinput.input(filename):
print line