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-05-08有遇到过吗?同样的规则 Excel 中 比Python 结果大
- 2024-03-30开始python成长之路
- 2024-03-29python optparse
- 2024-03-29python map 函数
- 2024-03-20invalid format specifier python
- 2024-03-18pool.map python
- 2024-03-18threads in python
- 2024-03-14python Ai 应用开发基础训练,字符串,字典,文件
- 2024-03-13id3 algorithm python
- 2024-03-13sum array elements python