Python yield的用法实例分析

1. 简介

在学习Python的迭代器和生成器时,我们经常会听到yield的名字。yield的作用是什么?yield和return有什么区别?本文将通过实例来解答这些问题。

2. yield的用法

yield是Python中的一个关键字,用于生成器的创建。生成器是一种特殊的迭代器,它不需要在内存中创建一个完整的集合,而是在需要的时候生成一个元素。在Python中,有两种方法可以创建生成器:

2.1 使用生成器函数创建生成器

生成器函数是一个包括yield关键字的函数。函数中的yield语句告诉Python解释器,当前函数是一个生成器函数。

下面是一个简单的生成器函数的例子:

def simple_generator():

yield 1

yield 2

yield 3

gen = simple_generator()

print(next(gen))

print(next(gen))

print(next(gen))

运行上述代码将输出:

1

2

3

在上述代码中,我们创建了一个简单的生成器函数simple_generator,并将其赋值给变量gen。我们使用next函数来获取下一个元素,直到所有元素都被消耗。

2.2 使用yield关键字生成值

我们可以使用yield关键字在普通函数中生成值。生成器函数每次调用yield语句时,它会返回一个值,并暂停函数的执行状态。当函数下次被调用时,它会从上次离开的地方继续执行。

下面是简单的例子:

def simple_generator():

print("执行前")

yield 1

print("执行中")

yield 2

print("执行后")

yield 3

gen = simple_generator()

print(next(gen))

print(next(gen))

print(next(gen))

运行上述代码将输出:

执行前

1

执行中

2

执行后

3

在上述代码中,我们创建了一个简单的生成器函数simple_generator,并将其赋值给变量gen。我们用next函数获取下一个元素,它会执行到第一个yield语句处,并返回1。当我们再次调用next函数时,它会从上次离开的地方继续执行,并返回2。最后一次调用next函数,它会从上次离开的地方继续执行,并返回3。

3. yield与return的区别

yield和return都可以将值从函数中返回。但是它们之间有一个重要的区别:return语句终止函数执行并返回值,而yield保留函数状态并返回值。

下面是一个简单的例子:

def simple_generator():

print("执行前")

return 1

print("执行中")

return 2

print("执行后")

return 3

gen = simple_generator()

print(gen)

运行上述代码将输出:

执行前

1

在上述代码中,我们创建了一个简单的函数simple_generator,它使用return语句返回1,结束函数的执行。因此,其他两个print语句都不会执行

下面是一个使用yield的例子:

def simple_generator():

print("执行前")

yield 1

print("执行中")

yield 2

print("执行后")

yield 3

gen = simple_generator()

print(next(gen))

print(next(gen))

print(next(gen))

运行上述代码将输出:

执行前

1

执行中

2

执行后

3

在上述代码中,我们创建了一个简单的生成器函数simple_generator,并将其赋值给变量gen。我们用next函数获取下一个元素,它会执行到第一个yield语句处,并返回1。当我们再次调用next函数时,它会从上次离开的地方继续执行,并返回2。最后一次调用next函数,它会从上次离开的地方继续执行,并返回3。

4. 实例分析

现在,让我们来看看一个更复杂的实例。假设我们有一个列表,我们要将其中的值都加上2,并返回加2后的列表。

使用列表推导式很容易实现:

lst = [1, 2, 3, 4, 5]

new_lst = [x+2 for x in lst]

print(new_lst)

运行上述代码将输出:

[3, 4, 5, 6, 7]

现在,让我们使用yield实现同样的功能:

lst = [1, 2, 3, 4, 5]

def add_two(lst):

for x in lst:

yield x+2

new_lst = list(add_two(lst))

print(new_lst)

运行上述代码将输出:

[3, 4, 5, 6, 7]

在上述代码中,我们创建了一个生成器函数add_two,它使用yield语句生成一个加2后的值。我们用list函数将生成器转换为列表,并将其赋值给变量new_lst。

结论

yield是Python中非常有用的一个关键字,可以用于创建生成器函数。通过使用yield,我们可以实现高效而简单的迭代器。

yield和return之间有一个非常重要的区别:return语句终止函数执行并返回值,而yield保留函数状态并返回值。这使生成器函数有许多独特的用途和优势。

后端开发标签