Python迭代器

2017-11-27  本文已影响0人  断尾壁虎V

迭代是一个重复的过程,每一次重复,都是基于上一次的结果而来。
迭代器的作用:主要用于去除序列类型中的值
可迭代对象:凡是对象有iter方法: 对象.iter,该对象就是可以迭代对象。包括字典,集合等。
使用iter方法后,可迭代对象就成为一个迭代器对象。使用迭代器对象对无序列的元素取值:

l={'ad':1,'b':2}
i=iter(l)
print(next(i))
print(next(i))
s={1,2,3,4}
i=iter(s)
print(next(i))
print(next(i))
print(next(i))
print(next(i))

使用迭代对象不仅能对非序列元素进行操作,也可以对序列元素如字符串,列表元组等进行操作。

迭代器的特点
from collections import Iterable,Iterator
s='python'
l=['a','b','c']
t=('a','b','c')
dic={'a':1,'b':2}
set1={1,2,3,4}
f=open('a.txt')

print(isinstance(s,Iterable))
print(isinstance(l,Iterable))
print(isinstance(t,Iterable))
print(isinstance(dic,Iterable))
print(isinstance(set1,Iterable))
print(isinstance(f,Iterable))

输出结果: 文件,字符串,列表,元组,字典,集合都是可迭代对象。
True
True
True
True
True
True

迭代器对象:

from collections import Iterable,Iterator
s='python'
l=['a','b','c']
t=('a','b','c')
dic={'a':1,'b':2}
set1={1,2,3,4}
f=open('a.txt')

print(isinstance(s,Iterator))
print(isinstance(l,Iterator))
print(isinstance(t,Iterator))
print(isinstance(dic,Iterator))
print(isinstance(set1,Iterator))
print(isinstance(f,Iterator))

输出结果: 文件是迭代器对象,其他的都是可迭代对象。
False
False
False
False
False
True

迭代器对象的优点
迭代器的缺点
for 循环的原理

for 循环就是利用的迭代器的原理,对传入的可迭代对象使用__iter__方法,然后再对生成的迭代器对象执行__next__方法。如对文件的操作:

with open('a.txt','r',encoding='utf-8') as f:
    for line in f:
        print(line)

代码等同于:

with open('a.txt','r',encoding='utf-8') as f:
    f1=f.__iter__() 
    try:          # 执行多个next,使用异常捕获
        f2=f1.__next__()
        print(f2)
    except Exception as err:
        exit(0)
    try:
        f2=f1.__next__()
        print(f2)
    except Exception as err:
        exit(0)
    try:
        f2=f1.__next__()
        print(f2)
    except Exception as err:
        exit(0)
    ...

上一篇 下一篇

猜你喜欢

热点阅读