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.')
?
【五】生成器的优点
????????与常规的列表相比,生成器具有以下优点:
- 节省内存。由于生成器是一次性生成一些数据,而不是将整个数据集保存在内存中,因此可以节省大量的内存空间。
- 延迟计算。由于生成器是惰性求值的,只有在需要时才会计算,因此可以延迟计算,避免不必要的计算。
- 可以无限生成数据。由于生成器是动态生成数据的,因此可以无限生成数据,而不需要提前知道数据集的大小。
????????需要注意的是,生成器函数可以包含多个
yield
语句,并且可以在必要时接收参数和返回值。此外,生成器函数还可以与循环、条件语句等结构进行组合,以实现更加复杂的逻辑。
????????最后,需要注意的是,生成器函数是一种非常强大和灵活的工具,但也需要谨慎使用。如果你没有正确地理解生成器函数的工作原理和机制,可能会导致一些难以调试和理解的问题。因此,在使用生成器函数时,请务必仔细阅读文档,了解其用法和限制,遵循最佳实践,并进行充分的测试和验证。
文章来源:https://blog.csdn.net/m0_58310590/article/details/135002001
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!