迭代器
一、什么是迭代
迭代迭代更新换代, 重复, 基于上一次的结果推出下一次的结果
二、可迭代对象
具有__iter__()
方法的就是可迭代对象,除数字类型和函数类型都是可迭代对象
x = 1 # 不可迭代对象
s = 'jiayi' # 可迭代对象
lt = [1, 2, 3] # 可迭代对象
dic = {'a': 1, 'b': 2} # 可迭代对象
tup = (1,) # 元组只有一个元素必须得加逗号# 可迭代对象
se = {1, 2, 3} # 可迭代对象
f = open('time.py') # 可迭代对象
eg:
s = 'jiayi'
s_iter = s.__iter__() #将它变为迭代器对象
print(s_iter.__next__()) #基于索引(基于上一次结果),通过__next__进行迭代
print(s_iter.__next__())
print(s_iter.__next__())
print(s_iter.__next__())
print(s_iter.__next__())
--------------------------------------------------------------
j
i
a
y
i
二、迭代器对象
具有__iter__()
方法并且具有__next__()
的就是迭代器对象,只有文件是迭代器对象
s = 'jiayi' # 可迭代对象,不属于迭代器对象
lt = [1, 2, 3] # 可迭代对象,不属于迭代器对象
dic = {'a': 1, 'b': 2} # 可迭代对象,不属于迭代器对象
tup = (1,) # 元组只有一个元素必须得加逗号# 可迭代对象,不属于迭代器对象
se = {1, 2, 3} # 可迭代对象,不属于迭代器对象
f = open('time.py') # 可迭代对象,迭代器对象
三、for循环原理(迭代循环)
先举个例子(上下代码其实就是一个东西)
list = [1,2,3]
list_iter = list.__iter__() #将它变为迭代器对象
while 1:
try:
print(list_iter.__next__())
except StopIteration: #对他进行异常捕捉
break
============================================================
for i in lt: # 不依赖索引取值,而是迭代取值
print(i)
'''
1. 把lt(可迭代对象/迭代器对象)用__iter__方法转换成迭代器对象
2. 使用__next__取出迭代器里的所有值
3. 使用__next__方法取尽迭代器中的所有值,一定会报错,通过异常捕捉退出while循环
'''
可迭代对象无论迭代多少次,他的内存地址是不变的
迭代器对象一定是可迭代对象; 可迭代对象不一定是迭代器对象