文章目錄
- 前言
- 一、`_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