当前位置: 首页 > news >正文

python学习之可迭代对象迭代器对象

可迭代对象 Iterable
含义:可以通过for...in..。这类语句遍历读取数据的对象称之为可迭代对象
遍历(迭代):依次从对象中把一个个元素取出来的过程
数据类型: str、list、tuple、dict、set等
可迭代对象的条件
1.对象实现了__iter__()方法
2.__iter__()方法返回了迭代器对象
1.3 for循环工作原理
1.先通过__iter__()可迭代对象的迭代器
2.对获取到的迭代器对象不断调用__next__()方法来获取
下一个值并将其赋值给临时变量i
1.4 isinstance():判断一个对象是否是可迭代对象或者是一个已知的数据类型
导入模块

from collections.abc import Iterable
# isinstance(o,t) o--对象,t--类型,可以是直接或间接类名、基本类型或者元组
print(isinstance(123,Iterable))  #False
print(isinstance('123',Iterable)) #True
print(isinstance(123,(int,float,str))) #是其中的一种就会返回True

2.迭代器 Iterator
含义:迭代器是一个可以记住遍历位置的对象,迭代器对象从集合的第一个元素开始访问,知道所有元素被访问完结束。迭代器只能往前不能退后
迭代器里面有两个函数
iter():获取可迭代对象的迭代器
next():一个个去取元素,取完元素后会引发一个异常

li = [1,2,3]
# 第一种方式:
# 1.创建迭代器对象
li2 = iter(li)
print('li2',li2)
# 2.获取下一条数据
print(next(li2))
print(next(li2))
print(next(li2))
# 3.取完元素之后,再使用next()会引发StopIteration异常
print(next(li2))
# 第二种方式:
li2 = li.__iter__()
print('li2',li2)
print(li2.__next__())
print(dir(li))

步骤:
1.iter()调用对象的__iter__(),并把__iter__()方法的返回结果作为自己的返回值
2.next()调用对象的__next__(),一个个取元素
3.所有的元素都取完了,__next__()就会引发StopIteration异常
可迭代对象 Iterable 迭代器 Iterator
凡是可以作用于for循环的都属于可迭代对象
凡是可作用于next()的都是迭代器

from collections.abc import Iterable,Iterator
name = 'milk'
print(isinstance(name,Iterable))   #True
print(isinstance(name,Iterator))  #False
# 可迭代对象并不一定是迭代器对象
name2 = iter(name)  #将name转换为迭代器
print(isinstance(name2,Iterable)) #True
print(isinstance(name2,Iterator)) #True
迭代器对象一定是可迭代对象
总结:
可迭代对象可以通过iter()转化成迭代器对象
如果一个对象拥有__iter__(),是可迭代对象,如果一个对象拥有__next__()和__iter__()方法,是迭代器对象
dir(): 查看对象中的属性和方法

3.迭代器协议
对象必须提供一个方法,执行该方法,要么就返回迭代器中的下一项,要么就引发StopIteration异常,来终止迭代
4.自定义迭代器类
两个特性: __iter__()方法和__next__()方法

class Test(object):def __init__(self):self.num = 1def func(self):print(self.num)self.num += 1
test = Test()
print(test)
# test.func()
# test.func()
# test.func()
for i in range(10):test.func()
class MyIterator(object):def __init__(self,max_num):self.num = 0self.max = max_numdef __iter__(self):return self  #返回的是当前迭代器类的实例对象def __next__(self):if self.num >= self.max:raise StopIteration("数据已经被取完了")self.num += 1return self.num
mi = MyIterator(100)
print(mi)
for i in mi:print(i)

http://www.dtcms.com/a/488722.html

相关文章:

  • 辽宁网站建设价格有没有外包活的网站
  • 安阳企业建网站wordpress变身插件
  • 【C++——模板】
  • 苏州网站开发公司兴田德润简介网站关键词排名100
  • 网站开发 百度网盘女的男的做那个视频网站
  • 我的世界做图的网站福田瑞沃es3报价及图片
  • 开源 | MeiGen-MultiTalk:基于单张照片实现多人互动演绎
  • 上海专业网站建设公司企业网站模板下载尽在
  • 肥料网站建设用c 做网站
  • 苏中建设集团网站网址免费个人网站在线制作
  • 娄底网站建设网站网站开发 旅游
  • 软件免费网站大全谷歌广告
  • hi宝贝网站建设那家好东莞做网站还赚钱吗
  • 沈阳网站建设dnglzx网站建设制作模板
  • 一个网站不兼容ie怎么做网站怎么挂广告
  • 开封建网站的公司网站开发与推广就业
  • 数字域名有哪些网站绍兴网站制作计划
  • 怎么做微信领券网站企业网站设计总结
  • 配置管理的配置与拉取、热更新的配置、动态路由
  • wordpress 书站亚马逊的网络营销方式
  • 高端网站建设创新苏州seo快速优化
  • 网校网站怎么做甘肃省兰州市城乡建设厅网站
  • 陕西省住房建设厅网站贴吧怎么做网站视频
  • cms网站管理系统源码做网站卖印度药
  • 网站专题方案单县住房和城乡建设局网站
  • java中的注解
  • 手撕大模型 | MQA 和 GQA 原理解析
  • 爱站网长尾关键词挖掘工具电脑版wordpress链接的图片保存到本地
  • 站长平台怎么做网站漂亮的学校网站模板下载
  • 户型图在哪个网站找免费发外链的网站