美文网首页
Python迭代器

Python迭代器

作者: 断尾壁虎V | 来源:发表于2017-11-27 18:22 被阅读0次

迭代是一个重复的过程,每一次重复,都是基于上一次的结果而来。
迭代器的作用:主要用于去除序列类型中的值
可迭代对象:凡是对象有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))

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

迭代器的特点
  • 可迭代对象通过iter可以得到迭代器对象。
  • 迭代器对象由iter方法,执行得到的仍然是迭代器本身。
  • 可迭代对象有iter方法。
  • 迭代器对象有iter方法,还有next方法。
  • 迭代器对象使用next,可以得到下一个值
  • 文件是迭代器对象,字符串,列表,元组,字典,集合都是可迭代对象。
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)
    ...

相关文章

网友评论

      本文标题:Python迭代器

      本文链接:https://www.haomeiwen.com/subject/vildbxtx.html