day 16 迭代器

1、可迭代对象

  内部含有__iter__方法的对象是可迭代对象

  遵循可迭代协议

der() 检查对象含有什么方法

  dir()会返回一个列表,这个列表含有该对象的以字符串的形式所有方法名。这样我们就可以判断python中的一个对象是不是可迭代对象了

  print(dir("abc"))

判断对象是否是可迭代对象的方法

方法一:

  print("__iter__" in dir([1,2,3]))

  通过成员运算符,返回bool值

方法二:

  fromcollections.abc import  Iterable

  print(isinstance("123",Iterable))

isinstance 叛断一个对象是什么类型,返回bool

1、迭代器

  内部含有__inter__且__next__方法的就是迭代器。

  可迭代对象通过.__iter__()可以转换成迭代器,满足迭代器协议

l= [1, 2, 3]
l_obj= l.__iter__()
 
判断迭代器的方法:
  
  第一种:
print('__next__'in dir(l_obj))
  第二种:
fromcollections.abcimport Iterator
print(isinstance('123',Iterator))
迭代器的取值方法:
方法一:
print(l_obj.__next__()) 一次取一个,超出范围会报错
 方法二: for 循环
注意:实际上可迭代对象是不可以一个一个的一次取值的,因为他没有__next__方法。
for循环提供一个机制:
1,将可迭代对象转化成迭代器。
2,利用__next__()进行取值。
3,用try异常处理方法防止报错。
迭代器特点:
1,节省内存。
上一条在内存中会被释放
2,满足惰性机制。
next一次,取一个值,绝不过多取值。​
3,取值过程不可逆(一条路走到黑)。
 
补充
  enumerate()   枚举
  返回元组,利用元组的拆包,分别返回序列的索引和值
  enumerate() 对象是迭代器
 能放在for循环里的一定是可迭代对象
 迭代器一定是可迭代对象,但是可迭代对象不一定是迭代器
学过的数据类型,int,bool不可迭代
原文地址:https://www.cnblogs.com/wyfmc/p/11837659.html