py---生成器和迭代器

1、生成器

在python中,一边循环一边计算的机制,称之为生成器:generator

1.1、生成器的定义

        生成器是一种迭代器,是一种特殊的函数,使用yield操作将函数构造成迭代器。普通的函数有一个入口,有一个返回值;当函数被调用时,从入口开始执行,结束时返回相应的返回值。生成器定义的函数,有多个入口和多个返回值;对生成器执行next()操作,进行生成器的入口开始执行代码,yield操作向调用者返回一个值,并将函数挂起;挂起时,函数执行的环境和参数被保存下来;对生成器执行另一个next()操作时,参数从挂起状态被重新调用,进入上次挂起的执行环境继续下面的操作,到下一个yield操作时重复上面的过程。Python的循环操作与C语言的实现不同,如果使用List等数据结构需要耗费大量的内容;循环操作中使用生成器只需要在内存中实例化一个对象,可以减少内存占用,提高循环操作的执行速度。

1.1、生成器特点

  • 在python中,使用了yield的函数被称之为生成器
  • 生成器是一个返回迭代器的函数,只能够用于迭代操作,简单理解就是生成器其实就是一个迭代器
  • 在调用生成器运行的过程中,每次遇到yield时,函数会暂停并保存当前所有的运行信息,返回yield值,并在下一次next()方法时,从当前位置继续执行。
  • 生成器是一个特殊的程序,可以被用作控制循环的迭代行为,python中生成器是迭代器的一种,使用yield返回值函数,每次调用yield都会暂停,可以使用next()函数和send()函数恢复生成器。
  • 生成器一次只能产生一个值,这样消耗的内存数量将大大减小,而且允许调用函数可以很快的处理前几个返回值,因此生成器看起来像是一个函数,但是表现得却像是迭代器

1.2、生成器的创建

一、将列表推导式的[]改为(),就能够生成一个生成器:generator

示例:

>>> l=[x*x for x in [1,2,3,4]]
>>> l
[1, 4, 9, 16]
>>> g=(x*x for x in [3,4,5,6])
>>> g
<generator object <genexpr> at 0x00F58870>

怎么查询每个元素呢,用next()命令:

 >>> next(g)
9
>>> next(g)
16
>>> next(g)
25
>>> next(g)
36
>>> next(g)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
>>>

但是如果每次用next() 也不是很方便,一般生成器是可以和for循环一起使用的。

示例1:

>>> g=(x%2 for x in [2,3,4,5,6,7])
>>> for i in g:
...     print(i)
...
0
1
0
1
0
1
>>>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值