首页 > 其他分享 >可迭代对象以及迭代器的说明

可迭代对象以及迭代器的说明

时间:2023-01-05 11:00:16浏览次数:45  
标签:__ 迭代 对象 iter next 说明 item

可迭代对象通过iter(),转化为迭代器对象,迭代器可以使用next()访问,可迭代对象不能直接使用next();

  • 迭代器是一个可以记住遍历的位置的对象,所以可以方便的使用next()。

可迭代对象(iterable):凡是具有__iter__的方法的类,都是可迭代的类。可迭代类创建的对象实现了__iter__方法,因此就是可迭代对象。用list、tuple等容器创建的对象,都是可迭代对象。下面两个例子:

Eg1:

my_list = [1, 2, 3] 

for item in my_list: # 可迭代对象
    print(item)  # 输出:1 2 3

Eg2

for i, item in enumerate([1, 2, 3]): # 迭代器对象
    print(f'index: {i}, item: {item}')
  • enumerate()是一个内置函数,它可以同时遍历一个列表的索引和元素。这个函数接受一个可迭代对象作为参数,并返回一个迭代器,该迭代器每次返回一对(索引,元素)。

这里就产生了一个疑问?为什么Eg1 for遍历的是一个iterable,Eg2 for遍历的是一个iterator

解答:for循环的工作机制

  • 当对象本身就是迭代器时,For循环工作机制;
    • 调用 __iter__方法,返回自身self,也就是返回迭代器;
    • 不断地调用迭代器的next()方法,每次按序返回迭代器中的一个值;
    • 迭代到最后没有元素时,就抛出异常 StopIteration,这个异常 python 自己会处理,不会暴露给开发者;
  • 在可迭代对象中,for循环工作机制;
    • 先判断对象是否为可迭代对象(等价于判断有没有__iter__或__getitem__方法),没有的话直接报错,抛出TypeError异常。有的话,调用 __iter__方法,返回一个迭代器。
    • 在python内部不断地调用迭代器的__next__方法,每次按序返回迭代器中的一个值;
    • 迭代到最后没有元素时,就抛出异常 StopIteration,这个异常 python 自己会处理,不会暴露给开发者。

总结:

For循环深层还是对迭代器进行遍历,只不过会自动的可迭代对象转换为迭代器。

参考目录:

Python中的可迭代对象、迭代器、For循环工作机制、生成器 - 个人文章 - SegmentFault 思否

Python3 迭代器与生成器 | 菜鸟教程 (runoob.com)

标签:__,迭代,对象,iter,next,说明,item
From: https://www.cnblogs.com/kphang/p/17026932.html

相关文章

  • 1_使用swiper数组对象循环图片遇到的问题
    今天在练习微信小程序的swiper组件时,想用列表循环出图片,发现图片一直没出来,控制台也没有报错,后来仔细一看,原来是语法格式写错了。以下是我列表循环踩过的坑:一:微......
  • Java 如何重写对象的 equals 方法和 hashCode 方法
    前言:Java对象如果要比较是否相等,则需要重写equals方法,同时重写hashCode方法,而且hashCode方法里面使用质数31。接下来看看各种为什么。一、需求:对比两个对象......
  • 网站中引入了多个版本的 JavaScript 库防止对象冲突的方法 - 在线客服系统源码
    如果你在网站中引入了多个版本的JavaScript库,并且在你的JavaScript中使用了同名的对象,则可能会出现对象名称冲突的情况。使用命名空间来解决这个问题。例如,你可以在你......
  • nVisual各项隐藏项配置说明
    nVisual可以部署在不同的项目中,但是每个项目都有自己不同的使用场景,有的不需要报表功能,有的不需要监测功能,还有的不需要连接外网的功能等。针对这些不同的需求,有必要且有可......
  • IO、NIO、BIO傻傻分不清吗,让我对象告诉你~~
    1、Stream与Channelstream不会自动缓冲数据,channel会利用系统提供的发送缓冲区、接收缓冲区(更为底层)stream仅支持阻塞API,channel同时支持阻塞、非阻塞API,网络ch......
  • dremio DatasetSaver 服务说明
    我以前简单写过关于元数据处理的说明(基于jprofiler+arthas工具)会依赖namespace服务实际对于数据的操作都是通过SourceMetadataManager执行的DatasetSaver服务提供的......
  • KS进行定制化安装,ks脚本说明
    在/var/lib/cobbler/kickstarts/目录下会生成sample_end.ks文件,这个文件就是安装系统时的默认配置文件,我们可以进行修改,来完成自己的个性化配置,配置文件详解如下关键字......
  • JAVA-上转型对象,下转型对象
    packagecom.example.barry;//父类publicclassparents{publicparents(){}publicvoidsay(){System.out.println("我是家长");}publicvoi......
  • vue面试之Composition-API响应式包装对象原理
    本文主要分以下两个部分对CompositionAPI的原理进行解读:reactiveAPI原理refAPI原理reactiveAPI原理打开源码可以找到reactive的入口,在composition-api/src/......
  • DSP+ZYNQ硬件说明手册【XQTyer】
    【开源资料】XQTyer硬件说明手册.pdf链接:https://share.weiyun.com/7TufhN89密码:2f4mvy    XQ6657Z35/45-EVM(XQTyer评估板)是一款基于TIKeyStone架构C6000......