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,一经查实,立即删除!

相关文章

微服务之间是如何独立通讯的?

前言 微服务架构是一种将一个应用程序拆分成多个小型、独立的服务的架构。在微服务架构中&#xff0c;各个服务之间需要进行通信来完成数据交互和业务处理。本文将详细介绍微服务之间如何独立通信的。 微服务之间独立通讯主要依靠定义清晰的API协议、使用轻量级交互机制、以及…

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;代码不…

深度学习相关知识点

epoch/batch/batch_size的关系 Epoch&#xff1a;模型在整个数据集上完成一次训练。一个epoch后&#xff0c;模型已经看过所有的训练数据&#xff0c;执行了正向传播和反向传播。通常训练需要多个epoch&#xff0c;模型才能逐步学习和收敛。Batch&#xff1a;由于在深度学习中…

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

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

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

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

Python 基础之条件语句

一、条件语句简介 在Python中&#xff0c;条件语句用于根据不同的条件执行不同的代码块。这使得程序能够根据特定的情况做出决策&#xff0c;并执行相应的操作。 二、if 语句 if语句是最基本的条件语句。它用于检查一个条件&#xff0c;如果条件为真&#xff0c;则执行特定的代…

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

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

利用sessionStorage收集用户访问信息,然后传递给后端

这里只是简单的收集用户的停留时间、页面加载时间、当前页面URL及来源页面&#xff0c;以做示例 <html><head><meta http-equiv"content-type" content"text/html; charsetUTF-8"/><title>测试sessionStorage存储用户访问信息<…

基于深度学习的设备异常检测与预测性维护

基于深度学习的设备异常检测与预测性维护是一项利用深度学习技术分析设备运行数据&#xff0c;实时检测设备运行过程中的异常情况&#xff0c;并预测未来可能的故障&#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…

面试感受(续)

保险销售篇 昨天经朋友介绍了解可以到他那&#xff08;保险&#xff09;去试试&#xff0c;今上午过去了&#xff0c;不得不说保险行业确实有钱哈&#xff0c;那办公室贼大&#xff0c;装修贼气派&#xff0c;不过现在保险行业的变种名称这么多的吗&#xff0c;大健康规划师&a…

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.…

C# DotNetty客户端,包含心跳发送,断线重连机制

1.新建MessageBean消息类型类&#xff0c;也可以不用&#xff0c;看自己需要 public enum MsgType { STATUS_CONNECT_ERROR, STATUS_CONNECT_SUCCESS, STATUS_CONNECT_CLOSED, STATUC_CONNECT_RECONNECT }public class MessageBean {/*** 消息类型*/private MsgType type;/***…