可迭代对象:从语法形式上讲,内置有__iter__方法的对象都是可迭代对象,字符串,列表,元组,字典,集合,打开的文件都是可迭代对象
1.迭代对象
s={1,2,3,4,5}
i = iter(s) #本质就是在调用s.__iter__(),返回s的迭代器对象i
next(i) 1
next(i) 2
next(i) 3
......
2.for循环原理
有了迭代器后,可以不依赖索引迭代值了,使用while循环的实现方式如下:
goods = ['mac','lenovo','acer','dell']
i=iter(goods) 每次都需要重新获取一个迭代对象
while True:
try:
print(next(i))
except StopIteration: #捕捉异常终止循环
break
for循环又称为迭代循环,in后可以跟任意可迭代对象,上述while循环可简写为:
goods = ['mac','lenovo','acer','dell']
for item in goods:
print(item)
3.优缺点
3.1优点
为序列的非序列类型提供了一种统一的迭代取值方式
3.2缺点
除非取尽,否则无法获取迭代器的长度
小结
- 迭代器主要是为一些没有下标索引的对象提供的方法(迭代对象),给迭代对象增加了.__iter__方法,变成了迭代器。
- while循环称为条件循环,for循环称为迭代器循环。
- 字符串,列表,元组,集合。。。他们都是可迭代对象,但是不是迭代器对象(他们没有.__next__方法),但是打开的文件对象是迭代器,也是可迭代对象