Python魔法函数__iter__的用法

下面是找到的一个比较好的科学解释:

Python中可迭代对象(Iterable)并不是指某种具体的数据类型,它是指存储了元素的一个容器对象,且容器中的元素可以通过__iter__( )方法或__getitem__( )方法访问。

1.__iter__方法的作用是让对象可以用for … in obj循环遍历,__getitem__( )方法是让对象可以通过实例名[index]的方式访问实例中的元素。这两个方法的目的是Python实现一个通用的外部可以访问可迭代对象内部数据的接口。

  1. 一个可迭代对象是不能独立进行迭代的,Python中,迭代是通过for … in obj来完成的。凡是可迭代对象都可以直接用for… in obj循环访问,这个语句其实做了两件事:第一件事是调用__iter__()获得一个可迭代器,第二件事是循环调用__next__()

  2. 常见的可迭代对象包括:
    a) 集合数据类型,如list、tuple、dict、set、str等;
    b) 生成器(generator),包括生成器和带yield的生成器函数(generator function)。

  3. 如何判断一个对象是可迭代对象呢?具体判断方法如下两种:

  • 利用numpy的iterable方法
from numpy import iterable
print(iterable(实例名))
  • 利用collections模块的Iterable类
from collections import Iterable
isinstance(实例名, Iterable)

一个典型的实例

随便定义一个对象,不定义__iter__方法:

from numpy import iterableclass MyList:def __init__(self, len: int):self.list = [i for i in range(len)]self.length = lendef __repr__(self) -> str:return f"MyList({self.length}):{self.list}"x = MyList(10)
for i in x:print(i)

运行结果:
在这里插入图片描述
显示MyList实例是不可迭代的

定义__iter__方法后

下面的例子简单实现一个range(n)

from numpy import iterableclass MyList:def __init__(self, len: int):self.cursor = -1self.length = lendef __iter__(self):return selfdef __next__(self):if self.cursor+1 < self.length:self.cursor += 1return self.cursorelse:exit(1)def __repr__(self) -> str:return f"MyList({self.length})"x = MyList(10)
print(iterable(x))
for i in x:print(i)

输出为:

True
0
1
2
3
4
5
6
7
8
9

使用next()一步一步迭代可以看的更清楚:

from numpy import iterable
#学习中遇到问题没人解答?小编创建了一个Python学习交流群:711312441class MyList:def __init__(self, len: int):self.cursor = -1self.length = lendef __iter__(self):return selfdef __next__(self):if self.cursor+1 < self.length:self.cursor += 1return self.cursorelse:exit(1)def __repr__(self) -> str:return f"MyList({self.length})"x = MyList(10)
print(iter(x))
print(next(x))
print(next(x))
print(next(x))
print(next(x))
for i in x:print(i)

输出结果为:

MyList(10)
0
1
2
3
4
5
6
7
8
9

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/882083.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vscode替换\n为换行符

文件内容是字符串&#xff0c;每行用\n分割&#xff0c;阅读困难&#xff0c;可以在vscode&#xff0c;用替换\n进行换行。

120多套各种类别微信小程序模板源码

微信小程序是一种轻量级的应用开发平台&#xff0c;由腾讯公司推出&#xff0c;主要应用于移动端&#xff0c;为用户提供便捷的服务体验。本资源包含120套微信小程序的源码&#xff0c;对于开发者来说是一份宝贵的参考资料&#xff0c;可以用来学习、研究或者作为开发新项目的起…

【Linux系统编程】环境基础开发工具使用

目录 1、Linux软件包管理器yum 1.1 什么是软件包 1.2 安装软件 1.3 查看软件包 1.4 卸载软件 2、Linux编辑器-vim 2.1 vim的概念 2.2 vim的基本操作 2.3 vim的配置 3、Linux编译器-gcc/g 3.1 gcc编译的过程​编辑​编辑​编辑 3.2 详解链接 动态链接 静态链接 4…

C++【内存管理】(超详细讲解C++内存管理以及new与delete的使用和原理)

文章目录 1.C/C内存分布2.C语言中动态内存管理方式3.C内存管理方式3.1 new/delete操作内置类型3. 2new/delete操作自定义类型 4. operator new与operator delete函数&#xff08;重点&#xff09;5. new和delete的实现原理5.1 内置类型5.2 自定义类型5.2.1 自定义类型调用new[]…

JAVA就业笔记6——第二阶段(3)

课程须知 A类知识&#xff1a;工作和面试常用&#xff0c;代码必须要手敲&#xff0c;需要掌握。 B类知识&#xff1a;面试会问道&#xff0c;工作不常用&#xff0c;代码不需要手敲&#xff0c;理解能正确表达即可。 C类知识&#xff1a;工作和面试不常用&#xff0c;代码不…

Python 如何处理大规模数据库表的迁移与数据迁移的高效执行

Python 如何处理大规模数据库表的迁移与数据迁移的高效执行 引言 在现代应用开发中&#xff0c;随着业务需求的增长&#xff0c;数据库表结构和数据往往需要进行迁移和更新。迁移&#xff08;Migration&#xff09;是指对数据库表的结构、数据类型、索引、约束等进行修改或更新…

电脑桌面便签怎么添加,好用便签软件怎么样?

在数字化时代&#xff0c;电脑桌面便签是现代工作和学习中不可或缺的工具&#xff0c;它能够帮助用户记录重要信息、设置提醒事项并高效管理任务。那么&#xff0c;电脑桌面便签怎么添加&#xff0c;好用便签软件怎么样呢&#xff1f;接下来让我们一起来探讨下吧。 一&#xf…

13.3寸工业三防平板数字化工厂产线数采手持终端

在数字化工厂的建设浪潮中&#xff0c;高效可靠的数据采集终端至关重要。尤其在水处理、食品加工等特殊工业环境下&#xff0c;设备的耐用性和数据安全性面临严峻挑战。传统的平板电脑难以应对复杂的工业现场&#xff0c;而一款性能卓越、坚固耐用的工业三防平板则成为提升生产…

使用docker搭建lnmp运行WordPress

一&#xff0c;部署目的 使用 Docker 技术在单机上部署 LNMP 服务&#xff08;Linux Nginx MySQL PHP&#xff09;。部署并运行 WordPress 网站平台。掌握 Docker 容器间的互联及数据卷共享。 二&#xff0c;部署环境 操作系统&#xff1a;CentOS 7Docker 版本&#xff1…

路由通信 的 VLAN技术

一、VLAN基础 虚拟局域网&#xff08;Virtual Local Area Network&#xff0c;VLAN&#xff09; 根据管理功能、组织机构或应用类型对交换局域网进行分段而形成的逻辑网络。 交换机最多支持4094个VLAN&#xff0c;其中默认管理VLAN是VLAN1&#xff0c;不能创建&#xff0c;也…

spark:数据的关联与合并、缓存和checkpoint

文章目录 1. 数据的关联与合并1.1 join关联1.1.1 内关联1.1.2 左关联1.1.3 右关联 1.2 Union合并 2. 缓存和checkpoint 1. 数据的关联与合并 1.1 join关联 students表数据&#xff1a; 1.1.1 内关联 内关联只返回两个 DataFrame 中在连接键上匹配的行。 # join 关联 from…

Python入门:轻松学会Python的*args和**kwargs

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 Python传参 📒📝 *args📝 **kwargs📝 综合使用 *args 和 **kwargs📝 注意事项⚓️ 相关链接 ⚓️📖 介绍 📖 在你编写Python代码时,是否曾遇到过需要处理数量不定的参数的情况?许多刚Python入门的新手在面对这种…

VLAN概述

1.VLAN的概念 VLAN&#xff08;Virtual Local Area Network&#xff0c;虚拟局域网&#xff09;是一种将物理网络划分成多个逻辑网络的技术。 2.VLAN的作用和好处 2.1作用 划分广播域&#xff0c;控制广播消息传递范围 2.2好处 控制广播 增强网络安全性 简化网络管理 3.…

visio导出pdf公式变形问题杂谈

其实不会变形。 我自己的情况是直接用edge PDF阅读器打开pdf看到的是公式有变形&#xff08;常见是字体、形状变了&#xff09;&#xff0c;但换一个pdf阅读器如adobe的就是正常的了 不过大家一般是用edge pdf阅读器直接打开查看&#xff0c;所以通过visio打印的方式导出pdf可…

若依框架中spring security的完整认证流程,及其如何使用自定义用户表进行登录认证,学会轻松实现二开,嘎嘎赚块乾

1&#xff09;熟悉之前的SysUser登录流程 过滤器链验证配置 这里security过滤器链增加了前置过滤器链jwtFilter 该过滤器为我们自定义的&#xff0c;每次请求都会经过jwt验证 ok我们按ctrl alt B跳转过去来看下 首先会获取登录用户LoginUser 内部通过header键&#xff0c;获…

第十二章 RabbitMQ之失败消息处理策略

目录 一、引言 二、RepublishMessageRecoverer 实现 2.1. 实现步骤 2.2. 实现代码 2.2.1. 异常交换机队列回收期配置类 2.2.2. 常规交换机队列配置类 2.2.3. 消费者代码 2.2.4. 消费者yml配置 2.2.5. 生产者代码 2.2.6. 生产者yml配置 2.2.7. 运行效果 一、引言 …

重新定义自动驾驶的动态视觉?谷歌提出几何优先的动态场景方法MonST3R

导读&#xff1a; 本文引入了Motion DUSt3R (MonST3R)&#xff0c;这是一种几何优先的动态场景方法&#xff0c;它以点图的形式直接估计几何形状。相比以前的工作&#xff0c;MonST3R具有如下关键优势&#xff1a; 增强的稳健性&#xff0c;特别是在具有挑战性的场景中&#xf…

【二刷hot-100】day2

目录 1.无重复字符的最长子串 2.找到字符串中所有字母异位词 3.和为 K 的子数组 4.滑动窗口最大值 1.无重复字符的最长子串 class Solution {public int lengthOfLongestSubstring(String s) {Map<Character,Integer> dict new HashMap<>();int ret0;int i-1;for…

从一致性哈希算法带来的分布式系统设计思考

引言 在分布式系统中&#xff0c;数据存储和访问的均匀性、高可用性及可扩展性至关重要。一致性哈希算法&#xff08;Consistent Hashing&#xff09;以其优秀的数据分布特性&#xff0c;广泛应用于缓存、负载均衡和数据库分片等领域&#xff0c;有效提升了系统的稳定性和灵活…

uniapp onPageScroll

子组件有onPageScroll, 首页也要引入onPageScroll, eg: 主页面 sell/detail/index 《子组件》 <script setup> 引入onPageScroll </script> 组件&#xff1a; 引入onPageScroll 别人的比较