[Python]使用生成器节约内存

1 生成器

  • 定义生成器是一种特殊的迭代器,它使用更简洁的语法来实现迭代功能,并且能够自动管理状态。生成器根据程序设计者制定的规则循环生成数据,当条件不成立时则生成数据结束。
  • 优势:数据不是一次性全部生成出来,而是使用一个,再生成一个,可以节约大量的内存。
  • 创建方式:①生成器推导式 ②yield关键字

2 生成器(类)推导式

# 创建生成器
my_generator=(i*2 for i in range(5))
print(my_generator)

# next()获取生成器下一个值
value=next(my_generator)
print(value)

# 遍历生成器
for value in my_generator:
    print(value,end=' ')

3 yield关键字

yield 关键字生成器的特征:

  • 在def函数中具有yield关键字
  • 代码执行到 yield 会暂停,然后把结果返回出去,下次启动生成器会在暂停的位置继续往下执行

  • 生成器如果把数据生成完成,再次获取生成器中的下一个数据会抛出一个StopIteration 异常,表示停止迭代异常

  • while 循环内部没有处理异常操作,需

生成器是一种特殊的迭代器,它可以在迭代过程中动态生成值,而不需要一次生成所有值并存储在内存中。生成器使用 yield 语句来定义,当调用生成器函数时,它返回一个生成器对象。每次调用生成器的 __next__() 或者 next() 方法时,生成器会执行代码直到遇到 yield 关键字,然后返回 yield 后面的值,并暂停代码的执行状态。当再次调用 __next__() 或者 next() 方法时,生成器会从上次暂停的地方继续执行代码,直到再次遇到 yield 关键字或者函数结束。 通过使用生成器,我们可以按需生成迭代序列,而不必一次性生成所有数据。这在处理大量数据或者无限序列时非常有用。生成器还可以用于节约内存和提高性能。 以下是一个简单的生成器函数的例子: ```python def my_generator(): for i in range(5): yield i gen = my_generator() print(next(gen)) # 输出: 0 print(next(gen)) # 输出: 1 print(next(gen)) # 输出: 2 print(next(gen)) # 输出: 3 print(next(gen)) # 输出: 4 ``` 在这个例子中,my_generator() 是一个生成器函数,它使用 for 循环和 yield 语句来生成从 0 到 4 的整数序列。通过调用 next() 方法,我们可以逐个获取生成器中的值。每次调用 next() 方法时,生成器会从上次暂停的地方继续执行代码,直到遇到下一个 yield 语句。当没有可迭代的值时,生成器会引发 StopIteration 异常,表示迭代结束。 希望这样能够帮助你理解 Python 中的生成器!如果还有其他问题,请继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值