Python
大约 2 分钟
Python
目录
泛型
迭代器
现在你可能注意到大多数容器对象都可以用 for 遍历:
- 列表
- 元组
- 字典
- 字符串
优点
- 这种形式的访问清晰、简洁、方便。迭代器的用法在 Python 中普遍而且统一
原理
在后台,for语句在容器对象中调用
iter()
,该函数返回一个定义了__next__()
方法的迭代器对象,它在容器中逐一访问元素没有后续的元素时,
__next__()
抛出一个 StopIteration 异常通知 for 语句循环结束你可以是用内建的
__next__()
函数调用__next__()
方法以下是其工作原理的示例:
>>> s = 'abc' >>> it = iter(s) >>> it <iterator object at 0x00A1DB50> >>> next(it) 'a' >>> next(it) 'b' >>> next(it) 'c' >>> next(it) Traceback (most recent call last): File "<stdin>", line 1, in ? next(it) StopIteration
使用(给自己的类添加迭代器)
例如
class Reverse: """Iterator for looping over a sequence backwards.""" def __init__(self, data): self.data = data self.index = len(data) def __iter__(self): # 迭代器 return self def __next__(self): # 返回 if self.index == 0: raise StopIteration self.index = self.index - 1 return self.data[self.index] >>> rev = Reverse('spam') >>> iter(rev) <__main__.Reverse object at 0x00A1DB50> >>> for char in rev: ... print(char) ... m a p s
生成器
概念
- 是创建迭代器的简单而强大的工具
写法
原理