关键字yield
与一个概念相关,即生成器。
- 生成器是一个不断产生值的函数;
- 包含
yield
语句的函数是一个生成器; - 生成器每次产生一个值(yield语句),函数被冻结,被唤醒后再产生一个值。
生成器一般与循环结构搭配使用,如下面的例子。
生成器写法:
1 | def gen(n): |
普通写法:
1 | def square(n): |
生成器写法和普通写法看起来效果是一样的,那有什么区别?
- 生成器每次只计算输出一个值,普通写法一次计算出所有值并返回。
生成器相比一次列出所有内容的优势?
- 更节省存储空间;
- 响应更迅速;
- 使用更灵活
上述例子中,我们n
比较小,只有5。
若n=1M,10M甚至100M,普通写法将花费大量的时间和空间,但生成器写法每次只要计算1个元素的时间和空间。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 GuKaifeng's Blog!
评论(延迟加载 / 需要可访问 GitHub Issues)