博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python疑问6:生成器,可迭代对象,迭代器区别和联系
阅读量:6825 次
发布时间:2019-06-26

本文共 1155 字,大约阅读时间需要 3 分钟。

生成器,可迭代对象,迭代器之间究竟是什么关系?

用一幅图来概括:
图片描述

1.生成器

定义生成器
方式一:

//区别于列表生成式 gen = [x*x for x in range(5)]gen = (x*x for x in range(5)) print(gen)  //Out:
at 0x00000258DC5CD8E0>

方式二:

def fib():    prev, curr = 0, 1    while True:        yield curr        prev, curr = curr, curr + prevf = fib()print(f) //Out:

定义成功后,我们可以利用next()访问生成器下一个元素

print(next(gen)) //0print(next(gen)) //1...print(next(gen)) //16print(next(gen)) //StopIteration

但一般用for循环遍历

for n in gen:    print(n) //0  1  4   9  16

2.迭代器

任何实现了__iter__和__next__()方法的对象都是迭代器。__iter__返回迭代器自身,__next__返回容器中的下一个值。所以生成器是特殊的迭代器,她内部具有这两种方法。
一个自定义的迭代器如下:

class Fib:    def __init__(self):        self.prev = 0        self.curr = 1     def __iter__(self):        return self     def __next__(self):        value = self.curr        self.curr += self.prev        self.prev = value        return valuef = Fib() count = 1 for n in f:    print(n)    count = count+1    if count>=10:        break//Out:1 1 2 3 5 8 13 21 34

3.可迭代对象

像list,tuple,set,dict,str等可以直接作用于for循环的对象,称为可迭代对象。可迭代对象实现了__iter__方法,用于返回迭代器。

demo = [1,2,3,4]print(isinstance(demo, Iterable)) //Trueiter_object = iter(demo)print(iter_object) //

转载地址:http://derzl.baihongyu.com/

你可能感兴趣的文章
开始学习Docker啦--容器理论知识(一)
查看>>
流数据库 概率计算概念 - PipelineDB-Probabilistic Data Structures & Algorithms
查看>>
Java注解不完全总结
查看>>
解决“此电脑上没有安装True Speech声音解码器”的方法
查看>>
Win08R2变脸Win7第一招配置Owner信息
查看>>
远程桌面连接 详细图解
查看>>
Linux下查看文件和文件夹大小
查看>>
redis总结
查看>>
CsGL着色的三角形
查看>>
后端码农谈前端(CSS篇)第七课:定位与浮动
查看>>
springboot(十八):使用Spring Boot集成FastDFS
查看>>
何勉:第一性原理和精益敏捷的规模化实施
查看>>
HDFS 文件格式——SequenceFile RCFile
查看>>
处理 Oracle SQL in 超过1000 的解决方案
查看>>
精致的JS提示
查看>>
Visual Studio.Net 2005中用SqlDataSource处理数据库特殊数据类型
查看>>
MySQL---数据库从入门走向大神系列(十四)-ComboPooledDataSource(C3P0连接池配置)
查看>>
11.3、Libgdx的音频之播放PCM音频
查看>>
你真的会玩SQL吗?之逻辑查询处理阶段
查看>>
Redis集群明细文档(转)
查看>>