文章目录
- 前言
- 一、`_iter__`:自定义迭代的钥匙
- 1.1 什么是 __iter__?
- 1.2 基本用法
- 1.3 高级用法:独立迭代器
- 二、itertools.islice:迭代切片的利器
- 2.1 什么是 itertools.islice?
- 2.2 基本用法
- 2.3 处理无限序列
- 2.4 实际应用
- 三、`__iter__` 与 `islice` 的结合
- 六、为什么需要它们?
- 总结
前言
迭代是 Python 的灵魂之一,无论是遍历列表、处理文件,还是操作无限序列,for
循环的优雅背后都隐藏着强大的机制。在“Python 解码”系列的第七篇中,我们将聚焦两个与迭代息息相关的工具:__iter__
方法和 itertools.islice
函数。它们分别是自定义迭代逻辑的钥匙和高效切片迭代的利器。
你是否想过如何让自己的类支持 for
循环?或者如何从无限数据流中提取特定部分?通过本文,你将掌握 __iter__
的核心原理,并学会用 itertools.islice
优雅地处理迭代任务。让我们一起探索迭代的艺术吧!
一、_iter__
:自定义迭代的钥匙
1.1 什么是 iter?
__iter__
是 Python 迭代协议的核心魔法方法,用于定义一个对象是否可迭代。当你对一个对象使用 for
循环或调用 iter()
函数时,Python 会寻找并调用它的 __iter__
方法。
- 作用:返回一个迭代器对象,该对象必须实现
__next__
方法。 - 意义:让自定义类支持迭代,像内置类型(如列表或元组)一样自然。
1.2 基本用法
让我们创建一个简单的类 MyRange
,模拟 Python 的 range
:
class MyRange:def __init__(self, start, end):self.start = startself.end = endself.current = startdef __iter__(self):return self # 返回自身作为迭代器def __next__(self):if self.current >= self.end:raise StopIteration # 迭代结束value = self.currentself.current += 1return value# 使用示例
my_range = MyRange(1, 5)
for num in