10 迭代器

  • 迭代器
    可以直接作用于for循环的数据类型有以下几种:
      1.集合数据类型(list,tuple,set,str等)
      2.generator,包括生成器和带yield的generator function
    这些可以直接作用于for循环的对象统称为可迭代对象(可循环对象):Iterable。
     可以使用isinstance()判断一个对象是否是Iterable对象。
from collections import Iterable

print(isinstance([],Iterable))
=>True
print(isinstance('abc',Iterable))
=>True
print(isinstance(1,Iterable))
=>False

生成器不但可以作用于for循环,还可以被next()函数不断调用并返回下一个值,直到最后抛出StopIterator错误,表示无法继续返回下一个值了。
可以被next函数调用并不断返回下一个值的对象称之为迭代器:Iterator
可以直接作用于for循环的对象统称为可迭代对象:Iterable

判断迭代器最快方法,使用dir(object)只要其中包含next方法,那么他就是迭代器。也可以通过isinstance判断是不是一个Iterator对象。

print(dir([1,2,3]))
=>['__add__', '__class__', '__contains__', '__delattr__',
 '__delitem__', '__dir__', '__doc__', '__eq__', '__format__',
  '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__',
   '__iadd__', '__imul__', '__init__', '__init_subclass__', 
   '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', 
   '__new__', '__reduce__', '__reduce_ex__', '__repr__', 
   '__reversed__', '__rmul__', '__setattr__', '__setitem__', 
   '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 
   'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 
   'reverse', 'sort']
print(isinstance((x for x in range(5)),Iterator))#生成器一定是迭代器
=>True

生成器都是Iterator对象,但是list,dict,str虽然是Iterable,却不是Iterator。使用iter()可以将这些变成Iterator。

print(isinstance(iter([]),Iterator))
=>True
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值