天下程序员首页cx06.com
管理 |  登录 |  注册
袁鹏飞的小屋
笔记(共39个) > python

python得生成器generator详解[生成器定义、取值、优势]

阅读 0赞 0回复 2024-08-11 17:10:52

1.生成器的介绍

根据程序员制定的规则循环生成数据,当条件不成立时则生成数据结束。数据不是一次性全部生成出来,而是使用一个,再生成一个,可以节约大量的内存。

2.创建生成器的方式

(1)推导式列表

(2)yield关键字

3.生成器推导式

# 创建生成器
 
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)
 
 
运行结果
<generator object <genexpr> at 0x101367048>
0
2
4
6
8

说明:

  • next函数可以获取生成器中下一个值
  • for循环遍历生成器对象,可以取出生成器的每一个值


4.yield关键字

只要在函数中看到了yield这个关键字那就是生成器

def my_generator(n):
    for i in range(n):
        yield i 
if __name__ == '__main__':
 
    g = my_generator(2)
     for i in g :
        print(i)
 运行结果:
 
开始生成...
0
完成一次...
开始生成...
1
完成一次...

说明:

代码执行到yield会暂停,把值返回出去,然后下次启动生成器会在暂停的位置继续往下执行
生成器如果把数据生成完成,再次获取生成器中的下一个数据会抛出Stoplteration异常,表示停止迭代异常
while 循环内部没有处理异常的操作,需要手动添加处理异常操作
for循环内部自动处理了停止迭代异常,使用起来更方便,推荐使用

生成器得优势:

每次取值都通过算法来生成下一个数据, 生成器每次调用只生成一个数据,可以节省大量的内存。

赞(0)

文章作者置顶的回复

全部回复列表 当前第(1)页

添加回复,文明发言,会审核.(服务区回复可以发广告)

作者最新笔记
天下程序员 www.cx06.com 程序员的网上家园!
作者微信:13126507001