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__方法的都是迭代器对象,只有文件。
迭代器对象一定是可迭代对象; 可迭代对象不一定是迭代器对象。

浙公网安备 33010602011771号