python生成器

2023-12-14 19:45:43

【一】Python生成器简介

????????在Python中,生成器(Generator)是一种特殊的迭代器,它的主要作用是用于延迟计算和节省内存。相比于常规的列表,生成器可以一次性生成一些数据,而不是将整个数据集保存在内存中。

【二】生成器函数

????????生成器函数是用于创建生成器的函数,其特点是使用yield语句返回一个生成器对象,而不是使用return语句返回一个普通的值。生成器函数可以像普通函数一样被调用,并且可以使用yield语句生成一些数据,当生成器被遍历时,它会依次产生这些数据。

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

def my_generator():
    for i in range(10):
        yield i
 

该生成器函数可以生成0到9之间的数字,可以通过以下方式遍历生成器:

gen = my_generator()
for i in gen:
    print(i)

【三】生成器表达式

????????除了生成器函数,Python还提供了一种快速创建生成器的方式——生成器表达式。生成器表达式是一种类似于列表推导式的语法结构,但是它返回的是一个生成器对象,而不是一个列表对象

创建生成器的两种方式

【1】列表的推导式

gend = (i for i in range(1,10))
#
print(next(gend))
print(next(gend))
print(next(gend))
print(next(gend))
?
?
# 1
# 2
# 3
# 4

【2】yield关键字

def sheng():
 ? ?yield 1
 ? ?yield 2
 ? ?yield 3
 ? ?yield 4
 ? ?yield 5
?
?
gend = sheng()
?
print(next(gend))
print(next(gend))
print(next(gend))
print(next(gend))
print(next(gend))
?
?
# 1
# 2
# 3
# 4
# 5

【四】yield + next

def my_generator():
    yield 1
    yield 2
    yield 3

gen = my_generator()

print(next(gen))  # 输出 1
print(next(gen))  # 输出 2
print(next(gen))  # 输出 3

# 当没有更多的值可供生成器产生时,调用 next() 会引发 StopIteration 异常
try:
    print(next(gen))
except StopIteration:
    print('No more items.')

?

【五】生成器的优点

????????与常规的列表相比,生成器具有以下优点:

  1. 节省内存。由于生成器是一次性生成一些数据,而不是将整个数据集保存在内存中,因此可以节省大量的内存空间。
  2. 延迟计算。由于生成器是惰性求值的,只有在需要时才会计算,因此可以延迟计算,避免不必要的计算。
  3. 可以无限生成数据。由于生成器是动态生成数据的,因此可以无限生成数据,而不需要提前知道数据集的大小。

????????需要注意的是,生成器函数可以包含多个 yield 语句,并且可以在必要时接收参数和返回值。此外,生成器函数还可以与循环、条件语句等结构进行组合,以实现更加复杂的逻辑。

????????最后,需要注意的是,生成器函数是一种非常强大和灵活的工具,但也需要谨慎使用。如果你没有正确地理解生成器函数的工作原理和机制,可能会导致一些难以调试和理解的问题。因此,在使用生成器函数时,请务必仔细阅读文档,了解其用法和限制,遵循最佳实践,并进行充分的测试和验证。

文章来源:https://blog.csdn.net/m0_58310590/article/details/135002001
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。