python中的生成器

Python2.5之后出现的一个可迭代对象。
生成器的底层实现使用迭代器实现。
1.生成器概念(一边循环一边计算下一个元素的机制/算法)
生成器,给一个函数生成一个懒加载(按需加载)的迭代器。

生成器的特征:不会一次性计算出存储的所有数据,而是根据需要,一次仅计算一个数据。

2.生成器的实现
生成器的数据可以通过两种方式获得:(1)next/send (2)for 循环遍历
(1)生产器表达式generator
元组推导式==生成器

(2)生成器函数
带有yield关键字的函数,就是生成器函数。
yield:能够让程序暂停到yield的位置,产出值。

生成器函数调用的时候,不是直接执行,而是创建了一个生成器对象。

生成器函数和普通函数的区别:
(1)生成器函数会包含一个或者多个yield
(2)被调用的时候,不是直接执行,而是返回一个生成器对象,底层迭代器
(3)可以通过next方法获得内部的元素,也可以通过for循环遍历内的元素
(4)当函数终止时,再次获得元素会报StopIteration异常
(5)函数一旦执行遇到yield,函数执行会被暂停,会将控制权交给调用者

3.yield表达式
第一次调用生成器:产生了生成器对象
next:激活生成器
生成器表达式的结果就是调用生成器send方法传入的参数

Value 并不是被yield I 赋值,value是send的参数,i是生成器调用send或者next的返回值
激活生成器:next(g),g.send(None)

使用生成器编程思路:
(1)抓住主线
(2)在主线中插入生成器调用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值