在Python中,yield
关键字用于从函数中返回一个生成器(generator)。生成器是一种特殊的迭代器,它允许你逐个地生成并返回元素,而不是一次性生成一个完整的列表,这样可以节省内存空间。使用 yield
的函数称为生成器函数,它返回一个迭代器对象。
如何使用 yield
创建生成器
下面是一个简单的例子,展示了如何使用 yield
关键字来创建一个生成器,该生成器用于生成一个范围内的数字:
def count_to_n(n):
for i in range(n):
yield i
# 使用生成器
gen = count_to_n(5)
# 遍历生成器
for num in gen:
print(num)
输出将会是:
0
1
2
3
4
在这个例子中,count_to_n
是一个生成器函数,它使用 yield
来逐个返回从0到n-1的整数。当调用这个函数时,它不会立即执行循环中的所有迭代,而是返回一个生成器对象 gen
。然后,你可以通过遍历这个生成器对象来逐个获取值。
生成器的高级用法
生成器不仅限于简单的迭代。它们还可以包含复杂的逻辑,并在每次迭代时根据需要生成值。此外,yield
语句还可以用于在生成器内部接收外部传入的值(通过 send()
方法),但这通常用于更高级的用例,如协程。
示例:使用 yield
和 send()
def simple_coroutine():
print('Coroutine started')
x = yield
print('Received:', x)
# 创建一个生成器
my_coro = simple_coroutine()
# 启动协程
next(my_coro) # 调用 next() 来执行到第一个 yield 语句
# 发送值给协程
my_coro.send(10)
输出:
Coroutine started
Received: 10
注意,在首次迭代生成器之前(即在首次调用 send()
之前),你通常需要调用 next(my_coro)
来启动生成器。send()
方法可以发送值给生成器,而 yield
表达式会接收这个值。然而,send(None)
等同于 next(my_coro)
。
这就是如何在Python中使用 yield
关键字来创建和使用生成器的基本介绍。生成器是Python中一个非常强大且有用的特性,特别是在处理大量数据或需要延迟计算时。