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/
发表评论 取消回复