12|迭代器、生成器与 `yield`
学 Python 时,你大概率已经写过很多这样的代码:
foritemin[1,2,3]:print(item)看起来很自然,但如果你往深一点想,会发现两个问题:
for到底是怎么一个一个取值的?- 为什么有些对象能循环,有些对象不能?
继续往后学,你还会遇到一个关键词:
yield
很多人第一次看到生成器时,会觉得它像“会暂停的函数”,但又说不清到底哪里不一样。
这篇文章我们就把这条链路讲清楚:
- 可迭代对象
- 迭代器
- 生成器
yield
一、什么是可迭代对象
最简单的理解:
能被for循环遍历的对象,通常可以叫可迭代对象。
比如:
nums=[1,2,3]name="Python"student={"name":"Tom","age":18}这些对象都能被遍历:
forxinnums:print(x)forchinname:print(ch)forkeyinstudent:print(key)常见可迭代对象有:
- 列表
- 元组
- 字符串
- 字典
- 集合
range()对象
二、什么是迭代器
迭代器可以理解成:
一个能不断“取下一个值”的对象。
Python 中可以用iter()把可迭代对象转换成迭代器。
nums=[10,20,30]it=iter(nums)print(next(it))print(next(it))