博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python 迭代器协议以及可迭代对象、迭代器对象
阅读量:5036 次
发布时间:2019-06-12

本文共 2120 字,大约阅读时间需要 7 分钟。

一、迭代器协议定义:

  迭代:是一个重复的过程,每一次重复,都是基于上一次的结果而来

while True: #单纯的重复    print('你瞅啥')l=['a','b','c','d']count=0while count < len(l):    print(l[count])    count+=1

  迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前退)

二、可迭代对象定义:

  实现了迭代器协议的对象(如何实现:对象内部定义一个__iter__()方法)是对象下有__iter__方法:对象.__iter__,该对象就是可迭代对象

s='hello'l=['a','b','c','d']t=('a','b','c','d')dic={
'name':'egon','sex':'m',"age":18}set1={1,2,3}f=open('db.txt')s.__iter__()l.__iter__()t.__iter__()dic.__iter__()set1.__iter__()f.__iter__()以上都是可迭代对象

三、迭代器对象定义:

  可迭代对象执行内置的__iter__方法,得到的结果就是迭代器对象

  1、有__iter__,执行得到仍然是迭代本身

  2、有__next__
  3、不依赖于索引的取值方式

dic={
'name':'egon','sex':'m',"age":18}i=dic.__iter__()# print(i) #iterator迭代器# i.__next__() #next(i)print(next(i))print(next(i))print(next(i))print(next(i)) #StopIterationl=['a','b','c','d']i=l.__iter__()print(next(i))print(next(i))print(next(i))print(next(i))print(next(i)) #StopIteration

四、迭代器对象的优点

1:提供了一种统一的(不依赖于索引的)迭代方式

2:迭代器本身,比起其他数据类型更省内存

l=['a','b','c','d']i=iter(l)dic={
'a':1,'b':2}x=dic.keys()print(x)i=x.__iter__()with open('a.txt') as f: # print(next(f)) # print(next(f)) # print(next(f)) f.read()

五、迭代器对象的缺点

1:一次性,只能往后走,不能回退,不如索引取值灵活

2:无法预知什么时候取值结束,即无法预知长度

l=['a','b','c','d']i=iter(l)print(next(i))print(next(i))print(next(i))

六, for循环与可迭代对象

  凡是可for循环的都是可迭代的对象

l=['a','b','c','d']for item in l: #iter_l=l.__iter__()    print(item)for item in {1,2,3,4}:    print(item)

七、判断可迭代对象与迭代器对象

需要from collections import Iterable,Iterator

用其中的isinstance()来判断是否是可迭代对象与迭代器对象

from collections import Iterable,Iterators='hello'l=['a','b','c','d']t=('a','b','c','d')dic={
'name':'egon','sex':'m',"age":18}set1={1,2,3}f=open('a.txt')#判断可迭代对象print(isinstance(s,Iterable))print(isinstance(l,Iterable))print(isinstance(t,Iterable))print(isinstance(dic,Iterable))print(isinstance(set1,Iterable))print(isinstance(f,Iterable))#判断迭代器对象print(isinstance(s,Iterator))print(isinstance(l,Iterator))print(isinstance(t,Iterator))print(isinstance(dic,Iterator))print(isinstance(set1,Iterator))print(isinstance(f,Iterator))

 

转载于:https://www.cnblogs.com/liuxiaowei/p/7226431.html

你可能感兴趣的文章
python数据类型图解
查看>>
C#微信登录-手机网站APP应用
查看>>
HTML5实践 -- iPhone Safari Viewport Scaling Bug
查看>>
一位数据挖掘成功人士 给 数据挖掘在读研究生 的建议
查看>>
Python3.6.0安装
查看>>
hdu1049
查看>>
H5项目常见问题及注意事项
查看>>
索尼(SONY) SVE1512S7C 把WIN8降成WIN7图文教程
查看>>
时间模块 && time datetime
查看>>
jquery自动生成二维码
查看>>
spring回滚数据
查看>>
新浪分享API应用的开发
查看>>
美国专利
查看>>
【JavaScript】Write和Writeln的区别
查看>>
百度编辑器图片在线流量返回url改动
查看>>
我对你的期望有点过了
查看>>
微信小程序wx:key以及wx:key=" *this"详解:
查看>>
下拉框比较符
查看>>
2.2.5 因子的使用
查看>>
css选择器
查看>>