第33课:生成器:要一个给一个的魔法
for 循环背后发生了什么?
for x in [1, 2, 3] 看起来简单,但 Python 在背后做了什么?
💻 在 Thonny 运行:手动迭代
iter() 把列表变成迭代器,next() 每次取一个值。for 循环其实就是不断调用 next(),直到 StopIteration。
yield:让函数暂停的魔法
普通函数 return 一次就结束了。yield 让函数暂停,下次调用时继续:
💻 在 Thonny 运行:第一个生成器
🖥️ 计算机小知识
内存就像一张书桌,空间有限。如果你要处理 1 亿个数字,全部放进列表,电脑可能直接卡死!
生成器的聪明之处:不把所有数据一次性放进内存,而是要一个算一个。就像你吃自助餐,不用把所有菜端到桌上——吃完一盘再去拿下一盘。
这就是内存层级的重要性:CPU 缓存最快(但最小)→ 内存很快 → 硬盘最慢(但最大)。省内存 = 让程序跑得更快更稳!
生成器表达式
列表推导式用 [],生成器表达式用 ()——同样的事,但不占内存:
💻 在 Thonny 运行:生成器表达式 vs 列表推导式
itertools:生成器的好帮手
💻 在 Thonny 运行:itertools 常用工具
练习
💻 在 Thonny 运行:无限斐波那契生成器