Python的生成器和迭代器

1. 生成器 Generator

前面有列表解析式,集合解析式,字典解析式,唯独没有元组解析式,这是因为元组的小括号 ( ) ,被用来做生成器了。

1.1 生成器表达式 Generator Expression

( 返回值 for 元素 in 可迭代对象 if 条件 )

通过生成器表达式,我们就创建了一个生成器,所说的生成器,就是不断地生产出我们需要的数据。

但是要注意,生成器里面储存的是所需数据的算法,而不是数据:

g = (i for i in range(5))
g
<generator object <genexpr> at 0x00000214B0EFFE08>
#生成器对象,genexpr里面是generator expression的缩写,后面at是指出存在哪里

1.2 用生成器获取数据

如果需要生成器计算出一个数据并返回,需要手动操作并返回,此时需要一个next()函数。

next(g)
0

next(g)
1

....

next(g)
4

next(g)
#会报错,StopIteration 

我们创建的这个生成器g,只能使用5次,之后再使用就会报错stopiteration,就是说迭代停止了,这说明什么?
说明一个生成器只能依次生产数据,如果内部算法可以得出的数据都生产完了,那么这个生成器就结束了他的使命,要想再次使用,得重新定义,也就是重新做一个生成器。

如果需要生成器生成全部的数据,需要用for循环来迭代,因为生成器都是迭代器iterator,但是一定要注意,迭代器不一定是生成器。

g = (i for i in range(5))

for i in g:
    print(i) 
    #迭代一遍这个生成器,此时它作为一个迭代器,行驶的是迭代器的功能,打印生产出的数据。
print('........................') #分隔一下
for i in g:
    print(i+1) #想再迭代一遍这个生成器(迭代器),打印i+1

0
1
2
3
4
........................

可以看出,这个生成器只能使用一次,一旦算法没有数据可以生产了,就停止。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值