yield是Python中的一个关键字,它在函数中使用,主要用于生成迭代器。这篇文章将详细介绍yield的三种用法及其相关的案例说明。
一、生成器yield:
yield作为生成器是yield最常见的用法之一,通过这种方式可以用生成器的方式来获取列表中的值。以一个简单的例子来说明:
```python
def generator():
for i in range(10):
yield i
gen = generator()
for item in gen:
print(item)
```
输出结果为:
```python
0
1
2
3
..
```
在这个例子中,generator函数也就是生成器函数,使用了yield来生成一个生成器。在for循环中迭代生成器gen,从而打印出我们需要的列表数据。
Python中生成器的这个特点非常有用,特别是在需要处理大量数据的时候。
二、协程yield:
yield还可以用于协程,一旦协程中出现了yield,那么主程序就会把控制权交给协程,协程函数可以暂停并保存状态,等待与协程通信并处理。这种方式是为了避免所有协程同时运行而发明的,可以减少IO等待并且提高程序效率。
以一个简单的例子来说明:
```python
import time
def worker():
while True:
task = yield #注意yield后面没有参数
print("I'm working on task: ", task)
time.sleep(1)
def scheduler():
worker_1 = worker()
worker_2 = worker()
next(worker_1) # 让生成器就绪,否则无法发送任务
next(worker_2)
for i in range(10):
if i % 2 == 0:
worker_1.send(i)
else:
worker_2.send(i)
scheduler()
```
以上程序会先定义两个worker工作者和一个scheduler调度器,在调度器中使用send发送任务给工作者加以处理。协程中的yield与生成器的区别是,协程的yield是使用了send控制的,而生成器的yield是迭代器控制的。
三、yield from:
yield from的作用是简化生成器的语法,代替for循环的语法糖。其语法结构如下:
```python
yield from iterable
```
以一个简单的例子来说明:
```python
def example():
yield from [1, 2, 3]
yield from ('a', 'b', 'c')
yield from range(0, 5)
for i in example():
print(i)
```
以上程序先定义了一个example生成器函数,使用yield from来打印出列表、元组以及range(0,5)的数据,最后使用循环的方式输出结果。
此外,yield from还可以在异步编程中使用,将一组可迭代对象合并成一个单一的可迭代对象,从而使任务协同处理。
综上所述,yield不仅可以用于生成器的使用,也可以用于协程的实现,此外还可以使用yield from来简化代码及异步编程的实现。熟练掌握这三种用法,有助于提高代码的编写效率,降低代码的复杂度。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.37seo.cn/
发表评论 取消回复