yield关键字详解与三种用法

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/

点赞(26) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部