当前位置: 技术文章>> 100道python面试题之-如何使用Python的yield关键字创建生成器?

文章标题:100道python面试题之-如何使用Python的yield关键字创建生成器?
  • 文章分类: 后端
  • 3173 阅读

在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() 方法),但这通常用于更高级的用例,如协程。

示例:使用 yieldsend()

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中一个非常强大且有用的特性,特别是在处理大量数据或需要延迟计算时。

推荐文章