python中的yield关键字
2022/6/7 1:21:52
本文主要是介绍python中的yield关键字,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
为了理解yield关键字,首先我们要看一下iterable和iterator。
iterable 和 iterator
在python中,对可iterable的对象使用iter()方法会生成一个iterator。如下:
>>> str = "ab" >>> iterator = iter(str) >>> next(iterator) 'a' >>> next(iterator) 'b'
需要注意的是一个iterator只能使用一次。当iterator将对象遍历完之后,就会抛出异常。
>>> next(iterator) Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration
当我们在python中使用for in
语句时,其实python是对一个可iterable的对象进行处理,首先生成其iterator,接着不断调用next()
>>> for ch in str: ... print(ch) a b c d
iterator的官方定义如下:
Iterator
一个代表了数据流的对象。反复调用__next__()方法,不断返回数据流中的数据,直至数据耗尽,抛出StopIteration异常。Iterator需要定义__iter__()方法用于Iterator Object本身。
为什么需要iterator
考虑一个集合存储了许多元素无法同时加载到内存中,这时我们就可以使用iterator,只有使用时才将其加载出来。
generator
generator是一种特殊的iterator,其通过调用一个包含yield关键字的函数或者generator expression生成。
# generator expression >>> gen_expr = (x**2 for x in range(3)) >>> gen_expr <generator object <genexpr> at 0x7fbf01547740> >>> for num in gen_expr: ... print(num) ... 0 1 4 # 使用yield关键字 >>> def create_generator(): ... for i in range(3): ... yield i**2 ... >>> gen_yield = create_generator() >>> next(gen_yield) 0 >>> for i in gen_yield: ... print(i) ... 1 4
参考
- https://stackoverflow.com/questions/2776829/difference-between-pythons-generators-and-iterators
- https://stackoverflow.com/questions/231767/what-does-the-yield-keyword-do
这篇关于python中的yield关键字的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器
- 2024-11-16四种数据科学Web界面框架快速对比:Rio、Reflex、Streamlit和Plotly Dash
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门