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

迭代器、迭代对象的 __iter__() 和 __next__()详解

1. 迭代器必须包含 __iter__()__next__() 吗?

是的,Python 迭代器(Iterator)必须实现 __iter__()__next__() 方法。但 __iter__() 其实可以返回 self,它的作用只是为了让迭代器和可迭代对象兼容。


1.1 迭代器的定义

一个迭代器(Iterator) 必须

  1. 实现 __iter__() 方法,返回自身 self
  2. 实现 __next__() 方法,每次调用返回下一个值,遇到数据耗尽时抛出 StopIteration

1.2 示例:自定义迭代器

class MyIterator:
    def __init__(self, start, end):
        self.current = start
        self.end = end

    def __iter__(self):
        return self  # 迭代器的 `__iter__()` 必须返回自身

    def __next__(self):
        if self.current >= self.end:
            raise StopIteration  # 迭代结束
        value = self.current
        self.current += 1
        return value

# 创建迭代器对象
it = MyIterator(1, 5)

# 使用 `next()`
print(next(it))  # 1
print(next(it))  # 2

# 也可以用 `for` 循环
for num in MyIterator(1, 5):
    print(num)

🔹 输出:

1
2
1
2
3
4

注意:

  • __iter__() 只是返回 self,让迭代器可以被 iter() 调用(如 iter(it))。
  • __next__() 控制迭代逻辑,每次返回一个值,最后抛出 StopIteration

1.3 为什么 __iter__() 必须返回 self

因为Python 规定 iter(iterator) 必须返回可用的迭代器

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

相关文章:

  • 使用Python快速接入DeepSeek API的步骤指南
  • 【Python使用】嘿马python数据分析教程第2篇:会员存量增量分析,增量等级分布分析【附代码文档】
  • 计算机网络-TCP的流量控制
  • 蓝桥杯嵌入式16届———LCD模块
  • 批量删除git本地分支和远程分支命令
  • 基于Docker容器部署DeepSeek-R1-Distill-Qwen-7B
  • CExercise04_2数组_1 利率在投资年份内每年的资产总价值
  • 虚拟电商-话费充值业务(五)充值成功逻辑和网络异常重试逻辑
  • Spring Boot 集成Redis 的Lua脚本详解
  • HCIP-12 中间系统到中间系统基础
  • 深度学习与神经网络 | 邱锡鹏 | 第三章学习笔记
  • 根据源码分析vue中nextTick的实现原理
  • makefile , CFALGS 与 EXTRA CFLAGS
  • 【HarmonyOS Next之旅】DevEco Studio使用指南(九)
  • 奇数和偶数的求法c++
  • MINIQMT学习课程Day2
  • 驱动开发硬核特训 · Day 1
  • 【4】搭建k8s集群系列(二进制部署)之安装master节点服务(kube-apiserver)
  • 使用 JavaScript 动态设置 CSS 样式
  • 09_TPL
  • 优质SD-WAN设备厂商推荐:Ogcloud
  • 选择网上购物系统要看几方面?
  • 7-4 BCD解密
  • 零基础玩转树莓派5!从系统安装到使用VNC远程控制树莓派桌面实战
  • [机器学习]随手记
  • NVM 多版本Node.js 管理全指南(Windows系统)
  • TP-Link TL-WR720N v3改造成无线打印伺服器
  • 【力扣hot100题】(048)二叉树的最近公共祖先
  • 硬件负载均衡:让服务像“牛顿钟”一样稳!
  • 如何重构前端项目