9月19日迭代器

迭代器

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

迭代器对象是任何实现了__ iter __ 和 __ next __ ()(python2中实现next())方法的对象都是迭代器,__ iter __ 返回迭代器自身,__ next __ 返回容器中的下一个值

x=1#不可迭代对象
s='nick'#可迭代对象
s.__iter__()
lt=[1,2,3]#列表是可迭代对象
lt.__iter__()
dic={'a':1,'b':2}#字典是可迭代对象
dic.__iter__()
tup=(1,)#元组是可迭代对象
tup.__iter__()
f=open('5555.py')#打开文件也是可迭代对象
f.__iter__()
def func():#是不可迭代对象
    pass
func()

通过上面的代码可以知道除了数字类型和函数之外都是可迭代对象

字符串迭代效果例子

s='jiang'
s_iter=s.__iter__()
print(s_iter.__next__())#__next__的作用是返回容器的值,这里基于索引(基于上一次结果)通过__next__进行迭代
print(s_iter.__next__())
print(s_iter.__next__())
print(s_iter.__next__())
print(s_iter.__next__())

迭代返回容器效果例子

s='jiang'
print(s.__iter__())#返回容器的内存地址

字典迭代效果例子

dic={'name':'jiangjunhao','age':16}
dic_iter=dic.__iter__()
print(dic_iter.__iter__())#打印内存地址
print(dic_iter.__next__())#打印字典里的键
print(dic_iter.__next__())

因为迭代器的两个要求字典都满足所以字典是迭代器对象

while循环

lt = [1,2,3]
lt_iter = lt.__iter__()
while 1:
   try:#用于解决报错问题
     print(lt_iter.__next__())
   except StopIteration:#except的意思是除了,根据用法就是出现这个错误就按照下面的语法停止
        break

for循环的原理就是迭代器循环

for i in lt:
    print(i)

# 1. 把lt(可迭代对象/迭代器对象)用__iter__方法转换成迭代器对象
# 2. 使用__next__取出迭代器里的所有值
# 3. 使用__next__方法取尽迭代器中的所有值,一定会报错,通过异常捕捉退出while循环

# 解决了不依赖索引取值

for循环实例

lt=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]
lt_iter=lt.__iter__()
for i in lt:
    print(lt_iter.__next__())

解决了不依赖索引取值

通过上面的笔记总结核心:

可迭代对象: 具有__iter__方法的对象就是可迭代对象,除了数字类型和函数都是可迭代对象。
迭代器对象: 具有__iter__和__next__方法的都是迭代器对象,只有文件。
迭代器对象一定是可迭代对象; 可迭代对象不一定是迭代器对象。
posted @ 2023-09-19 18:15  scxlzb  阅读(13)  评论(0)    收藏  举报