yield关键字详解与三种用法

yield是Python中的一个关键字,用于生成器函数中的返回值,它提供了一种简单而有效的方法来迭代序列中的元素,即每次返回一个元素并暂停函数的执行,等待下一次迭代时再继续执行。

一、yield的基本用法

yield语句在生成器函数中使用,将其称为生成器函数,它的作用是返回一个生成器对象,该对象可以用于迭代序列中的元素。下面的代码演示了基本的使用方法:

```python

def gen():

yield 1

yield 2

yield 3

g = gen()

print(next(g)) # 输出1

print(next(g)) # 输出2

print(next(g)) # 输出3

```

上面的代码中,gen()函数是一个生成器函数,它通过yield语句返回值。生成器对象g是通过调用gen()函数创建的。使用next()函数依次迭代生成器对象g,输出1、2、3。当所有的元素迭代完毕时,再次调用next()会引发StopIteration异常。

二、yield表达式的用法

在生成器函数中,yield语句不仅可以返回值,还可以发送值。可以使用yield表达式来获取调用方传入的值,如下面的代码:

```python

def gen():

x = yield

yield x

g = gen()

next(g)

print(g.send(1)) # 输出1

```

上面的代码中,调用next(g)方法时没有传入值,因为在第一次调用时,生成器函数会执行到yield语句,因此必须先执行一次next()方法,以便生成器函数执行到yield语句。当调用g.send(1)方法时,发送了一个值1作为yield表达式的结果,即x = 1,然后生成器函数再次执行到yield语句(第二个yield),将x的值返回给调用方。

三、yield的多重用途

使用yield语句时,不仅可以返回值,还可以接收值和处理异常。下面的代码演示了多个yield语句的用法:

```python

def gen():

try:

while True:

x = yield

print("received:", x)

except GeneratorExit:

print("done")

g = gen()

next(g)

for i in range(3):

g.send(i)

g.close() # 执行finally语句

```

上面的代码中,使用try/except语句处理异常。在生成器函数中使用一个无限循环,不停地接收值(使用yield语句),然后打印出来。当生成器对象通过g.close()关闭时,GeneratorExit异常会被引发,捕获该异常,打印出"done"。此外,还可以使用yield语句在生成器函数中返回值。

四、总结

以上是yield关键字的介绍以及三种用法的说明,yield语句是Python中很有用的一个特性,可以方便地实现迭代器。它可以实现函数状态的挂起和恢复,可以接收值,处理异常,能够提供更加灵活的功能。生成器对象是一个非常有用的Python对象,利用它可以避免在内存中创建大量的对象,提高Python的效率。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.37seo.cn/

点赞(86) 打赏

评论列表 共有 0 条评论

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