迭代器和生成器

迭代器:
 双下方法 : 很少直接调用的方法。一般情况下,是通过其他语法触发的
 可迭代的 —— 可迭代协议 含有__iter__的方法('__iter__' in dir(数据))
 可迭代的一定可以被for循环
迭代器协议: 含有__iter__和__next__方法
迭代器一定可迭代,可迭代的通过调用iter()方法就能得到一个迭代器
迭代器的特点:
    很方便使用,且只能取所有的数据取一次
    节省内存空间

生成器:
 生成器的本质就是迭代器
生成器的表现形式
    生成器函数
    生成器表达式
生成器函数:
    含有yield关键字的函数就是生成器函数
    特点:
        调用函数的之后函数不执行,返回一个生成器
        每次调用next方法的时候会取到一个值
        直到取完最后一个,在执行next会报错

 写生成器实现:有一个文件,从文件里分段读取内容
readline

 read(10)
 在读出来的内容前面加上一个'***',再返回给调用者
 def generator():
     for i in range(20):
         yield '哇哈哈%s'%i

 g = generator()  #调用生成器函数得到一个生成器
 print(list(g))
 ret = g.__next__()     #每一次执行g.__next__就是从生成器中取值,预示着生成器函数中的代码继续执行
 print(ret)
 num = 0
 for i in g:
     num += 1
     if num > 50:
         break
     print(i)

 从生成器中取值的几个方法
     next
    for
     数据类型的强制转换 : 占用内存

转载于:https://www.cnblogs.com/Intermittent-psychosis/p/10590793.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值