迭代器

迭代器

一、什么是迭代

迭代迭代更新换代, 重复, 基于上一次的结果推出下一次的结果

二、可迭代对象

具有__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循环
    '''

可迭代对象无论迭代多少次,他的内存地址是不变的

迭代器对象一定是可迭代对象; 可迭代对象不一定是迭代器对象

原文地址:https://www.cnblogs.com/yanjiayi098-001/p/11340728.html