# 迭代: 当前执行依赖于上一次执行结果,
可迭代对象
内置了__iter__()方法的,就是可迭代对象
基本数据类型中,属于可迭代对象的有:字典、列表、元组、集合、字符串、文件对象。
迭代器对象:#打印类型是iterator
可迭代对象调用__iter__()方法,返回值就是迭代器对象。
迭代器对象调用__iter__()方法,返回依然是自己
迭代器对象.__iter__().__iter__().__iter__() 等价与 迭代器对象.__iter__()
(很重要,文件对象可以实现for循环的原理就是这个。)
迭代器对象的特点
迭代器对象有两个方法: __iter__()方法和 __next__()方法。
迭代器是一种节省空间的数据类型,可以被for循环,但是不会占用太大的内存空间。举例 range(10)
迭代器不依赖于索引取值。。
既是可迭代对象又是迭代器对象的, 就是文件类型。
迭代器取值:
(1)迭代器调用__next__()方法,依赖于前边的执行次数,每次会获得一个值。如果取完了,就会报错。
内置方法的简写:对象.__方法名__(),可以简写为 方法名(对象), 很多方法都可以,但不是全部,
‘abc’.__iter__()方法 等价与 iter('abc')
'abc'.__iter__().__next__() 等价与 next('abc'.__iter__())
for循环内部原理:
以列表为例:
ll =[1,2,3,4]
try:
llIter = ll.__iter__()
while True:
llIter.__next__()
except Exception():
pass
for i in ll 这句话就是先对ll调用__iter__(), 从可迭代对象变成迭代器对象,然后使用while True循环调用__next__()方法,直到程序异常报错,
文件类型既是可迭代对象也是迭代器对象,底层调用__iter__()方法,返回的依然是自己。因此文件类型是支持for循环的。