<< 返回目录
1 Python自学 - 类进阶(迭代器)
迭代器是一个实现了 __iter__
和 __next__
方法的对象。实现这两个方法是Python
迭代行为一种约定。
为什么要用迭代器?迭代器的好处是不占内存,它并不会像列表一样,把每个成员都占满。
1.1 迭代器的实现
1.1.1 实现__iter__()
方法
__iter__
方法必须返回迭代器对象本身,即 self
。该方法使对象可迭代,意味着可以使用 for
循环遍历。
def __iter__(self):return self
1.1.2 实现__next__()
方法
__next__
方法返回迭代器的下一个元素。当没有更多元素时,应该引发 StopIteration 异常。
完整示例:
class HeavenlyEarthlyIterator:def __init__(self, maxlen):self.heavenly_stems = ["甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸"]self.earthly_branches = ["子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"]self.stem_index = 0self.branch_index = 0self.maxlen = maxlenself.index = 1def __iter__(self):return selfdef __next__(self):if self.index <= self.maxlen:if self.stem_index >= len(self.heavenly_stems):self.stem_index = 0if self.branch_index >= len(self.earthly_branches):self.branch_index = 0result = self.heavenly_stems[self.stem_index] + self.earthly_branches[self.branch_index]self.stem_index += 1self.branch_index += 1self.index += 1return resultelse:raise StopIteration()# 使用示例
for i in HeavenlyEarthlyIterator(60):print(i, end=",")
输出:
甲子,乙丑,丙寅,丁卯,戊辰,己巳,庚午,辛未,壬申,癸酉,甲戌,乙亥,丙子,丁丑,戊寅,己卯,庚辰,辛巳,壬午,癸未,甲申,乙酉,丙戌,丁亥,戊子,己丑,庚寅,辛卯,壬辰,癸巳,甲午,乙未,丙申,丁酉,戊戌,己亥,庚子,辛丑,壬寅,癸卯,甲辰,乙巳,丙午,丁未,戊申,己酉,庚戌,辛亥,壬子,癸丑,甲寅,乙卯,丙辰,丁巳,戊午,己未,庚申,辛酉,壬戌,癸亥,
示例中声明了迭代器的长度由对象创建时的参数maxlen
指定,在__next__()
函数中,对self.index
进行递增和判断,当达到最大长度时,抛出StopIteration
异常(这是迭代器的标准动作),for
循环会检测StopIteration
异常后停止。
1.2 内置函数iter()
和next()
iter()
函数可以把一个可迭代对象变成一个迭代器,如果对象已经是迭代器,则返回对象本身。next()
函数可以获取迭代器的下一个成员
my_list = [1, 2, 3]
my_iterator = iter(my_list)
print(next(my_iterator)) # 输出: 1
print(next(my_iterator)) # 输出: 2
print(next(my_iterator)) # 输出: 3
# 引发 StopIteration 异常
print(next(my_iterator))
作者声明:本文用于记录和分享作者的学习心得,可能有部分文字或示例来源自豆包AI,由于本人水平有限,难免存在表达错误,欢迎留言交流和指教!
Copyright © 2022~2025 All rights reserved.
<< 返回目录