Python 迭代器、生成器
2023-09-27 14:25:29 时间
迭代器是一个可以记住遍历位置的对象。
迭代器从集合的第一个元素开始访问,直到所有的元素被访问完。迭代器只能往前不会后退。
迭代器两个基本方法: iter() 和 next()。
1. 迭代器 VS 可迭代对象(Iterable)
列表、元组、字典、集合都是可迭代对象。它们是迭代的容器,可从容器中获取迭代器(Iterator)。
实例:
从元组返回一个迭代器
mytuple = ("apple", "banana", "cherry") myit = iter(mytuple) # 创建迭代器对象 print(next(myit)) # 输出迭代器的下一个元素 print(next(myit)) print(next(myit))
输出:
apple
banana
cherry
字符串也是可迭代对象。
mystr = "banana" myit = iter(mystr) print(next(myit)) print(next(myit)) print(next(myit)) print(next(myit)) print(next(myit)) print(next(myit))
输出:
b
a
n
a
n
a
2. 遍历迭代器
mytuple = ("apple", "banana", "cherry") for x in mytuple: print(x)
输出:
apple
banana
cherry
提示:for 循环实际上创建了一个迭代器对象,并为每个循环执行 next() 方法。
3. 创建迭代器
把一个类作为一个迭代器需要在类中实现 __iter__() 和 __next__() 方法。
__iter__() 方法返回一个特殊的迭代器对象,这个迭代器对象实现了 __next__() 方法并通过 StopIteration 异常标识迭代的完成。
__next__() 方法返回下一个迭代器对象。
实例:
创建一个返回数字的迭代器,初始值 1,逐步递增 1。
class MyNumbers: def __iter__(self): self.a = 1 return self def __next__(self): x = self.a self.a += 1 return x myclass = MyNumbers() myiter = iter(myclass) print(next(myiter)) print(next(myiter)) print(next(myiter)) print(next(myiter)) print(next(myiter))
输出:
1 2 3 4 5
StopIteration
结束迭代,防止出现无限循环。
class MyNumbers: def __iter__(self): self.a = 1 return self def __next__(self): if self.a <= 10: x = self.a self.a += 1 return x else: raise StopIteration myclass = MyNumbers() myiter = iter(myclass) for x in myiter: print(x)
输出:
1 2 3 4 5 6 7 8 9 10
相关文章
- 跟我学Python图像处理丨关于图像金字塔的图像向下取样和向上取样
- Python 操作redis有序集合(sorted set)
- python学习笔记(字典、print 的两个变量、一些迭代工具(zip函数、enumerate),简单推导(range))
- [ python ] 迭代器和生成器
- Python常用函数:glob.glob():返回所有匹配的文件路径列表、glob.iglob():获取一个可遍历生成器,使用它可以迭代获取匹配的文件路径名
- Python:迭代器、生成器【使用了yield的函数称为生成器】【生成器是一个返回迭代器的函数】【用List遍历数据会一次性加载所有数据,占用内存太大;生成器可以分批次向内存加载数据】
- 完全理解Python迭代对象、迭代器、生成器
- 用随机投掷飞镖法计算Pi值(Randomness Throwing dart Pi Python)
- 【python入门】之教你编写自动获取金币脚本
- Python 迭代对象、迭代器、生成器
- 【Python】python list 迭代删除
- python实现模拟浏览器訪问网页
- 【Python基础】文件基础练习:文件的读写 || 迭代遍历输出文件内容 || with open as f 语句 || for in 循环 || writelines || readlines
- 黑马程序员&传智播客 python 迭代器学习笔记
- Python 高级特性(1)- 切片
- 流畅的python第十四章可迭代的对象,迭代器和生成器学习记录
- 学习资源(https://docs.python.org/zh-cn/3/)
- python代码风格-PEP8
- 什么是Python迭代器?
- Python中可迭代对象是什么?
- Python中的迭代是什么意思?
- 第4.3节 Python中与迭代相关的函数
- 想学Python爬虫,数据分析,自动化办公,没有任何编程基础,该如何入门?
- [Python]深入理解容器、迭代器与生成器
- python与正则表达式(re)
- Python 进阶_迭代器 & 列表解析