1 可迭代对象
内部含有__iter__方法的对象是可迭代对象
遵循可迭代协议
dir() 检查对象含有什么方法
dir()会返回一个列表,这个列表中含有该对象的以字符串的形式所有方法名。这样
我们就可以判断python中的一个对象是不是可迭代对象了
print(dir("abc"))
判断对象是否可迭代对象的方法
方法一
print('__iter__'in dir([1,2,3]))
通过成员运算符,返回bool值
方法二
fromcollections.abc import lterable
print(isinstance(‘123’,lterable))
isinstance 判断一个对象是什么类型,返回bool
迭代器
内部含有__iter__且__next__方法的就是迭代器
可迭代对象通过__iter__()可以转换成迭代器,满足迭代器协议
l = [1,2,3]
l = _obj=l.__iter__()
判断迭代器的方法
第一种
print('__next__'in dir(l_obj))
第二种
fromcollections.abcimport lterator
print(isinstance('123',lterator))
迭代器的取值方法
方法一
print(l_obj._next_())一次取一个,超出范围会报错
方法二 for 循环
注意 实际上可迭代对象是不可以一个一个的一次取值的,因为他没有_next_方法
for 循环提供一个机制
1 将可迭代对象转化成迭代器
2 利用_next_()进行取值
3 用try 异常处理方法防止报错
迭代器特点
1 节省内存
上一条内存中会被释放
2 满足惰性机制
next一次,取一个值,绝不过多取值
3 取值过程不可逆(一条路走到黑)
补充
enumerate()枚举
返回元组,利用元组的拆包,分别返回序列的索引和值
enuumerate()对象是迭代器
能放在for循环里的一定是可迭代对象
迭代器一定是可迭代对象,但是可迭代对象不一定是迭代器
学过的数据类型 int bool 不可迭代