文章目录
- 迭代器
- 获取迭代器的方案
- iter()
- `__iter__()`
- 从迭代器中拿到数据的方案
- next()
- `__next__()`
- 模拟for循环的工作原理
- 迭代器的特性
迭代器
首先请看以下代码:
forcin'hello':print(c)要使用for c in这种形式进行遍历, 对象一定要是可迭代的东西(iterable), 例如: str, list, tuple, dict, set, open()
可迭代的数据类型都会提供一个叫迭代器的东西, 这个迭代器可以帮我们把数据类型种的所有数据一个一个拿出来
获取迭代器的方案
iter()
iter()内置函数可以直接拿到迭代器
it=iter("hello")print(it)# <str_ascii_iterator object at 0x00000280FF552530>__iter__()
__iter__()特殊方法
s='hello'it=s.__iter__()print(it)# <str_ascii_iterator object at 0x0000011BEDB92530>从迭代器中拿到数据的方案
next()
使用next()内置函数
it=iter("hello")print(next(it))print(next(it))print(next(it))print(next(it))print(next(it))print(next(it))# 报错, StopIteration注意: 这里迭代器超出对象的范围就会报错
迭代器停止了,就不可以从迭代器中拿数据了
__next__()
s='hello'it=s.__iter__()print(it.__next__())print(it.__next__())print(it.__next__())print(it.__next__())print(it.__next__())print(it.__next__())# 报错 StopIteration模拟for循环的工作原理
s="helo"it=iter(s)whileTrue:try:data=next(it)print(data)exceptStopIteration:break下面的代码是一段错误代码
forcin123:passfor循环中一定是要拿迭代器的, 所有不可迭代的东西不能用for循环
迭代器统一了所有不同数据类型的遍历方式
迭代器本身也是可迭代的
s='hello world'it=s.__iter__()forminit:print(m)迭代器的特性
- 迭代器只能向前不能反复
- 迭代器本身是可迭代的
- 迭代器特别节省内存
- 惰性机制