当前位置: 首页 > news >正文

云阳做网站汽车网站建设模板

云阳做网站,汽车网站建设模板,英文网站建设深圳,建筑公司网站宣传建筑工地文案范文图片点击蓝字关注我迭代是Python中常用且非常强大的一个功能#xff0c;它可以用于访问集合、列表、字符串、字典等数据结构的元素。我们经常使用循环和条件语句#xff0c;我们也清楚哪些是可以迭代访问#xff0c;但是具体它们之间有什么有什么异同之处#xff1f;有哪些特点… 点击蓝字关注我迭代是Python中常用且非常强大的一个功能它可以用于访问集合、列表、字符串、字典等数据结构的元素。我们经常使用循环和条件语句我们也清楚哪些是可以迭代访问但是具体它们之间有什么有什么异同之处有哪些特点什么是迭代器、什么是生成器、什么是可迭代对象这些问题对于初学者而言却是很少去细致的研究本文就来详细阐述一下它们之间的关系已经它们的特别之处。—▼—可迭代对象在讲解迭代器和生成器之前先介绍一下可迭代对象。可迭代对象是Python中一个非常庞大的概念它主要包括如下三类迭代器序列字典从上图可以看出不同概念之间的关系迭代器是可迭代对象的一个子集而生成器又是迭代器的一个子集是一种特殊的迭代器。除了迭代器之外Python中还有序列、字典等可迭代对象。现在已经直观的了解了可迭代对象与迭代器、生成器之间的关系那么用Python语言怎么表述它们的区别呢可迭代对象需要实现__iter__方法迭代器不仅要实现__iter__方法还需要实现__next__方法在使用层面可迭代对象可以通过in和not in访问对象中的元素举一个例子X  set([1,2,3,4,5])print(X)print(type(X))print(1 in X)print(2 not in X)for x in X:    print(x)# 输出{1, 2, 3, 4, 5}class setTrueFalse12345前面提到可迭代对象实现了__iter__方法但是它没有实现__next__这也是判定迭代器和其他可迭代对象的关键之处可以看一下通过next访问上述示例中可迭代对象X会报错next(X)# 输出TypeError: set object is not an iterator报的错误是set object is not an iterator它指明了set集合是一个可迭代对象但不是迭代器下面就来介绍一下迭代器。迭代器迭代器是可迭代对象的一个子集它是一个可以记住遍历的位置的对象它与列表、元组、集合、字符串这些可迭代对象的区别就在于next方法的实现其他列表、元组、集合、字符串这些可迭代对象可以很简单的转化成迭代器通过Python内置的iter函数能够轻松把可迭代对象转化为迭代器下面来看一个例子X  [1,2,3,4,5]print(type(X))Y  iter(X)print(type(Y))print(next(Y))print(next(Y))print(next(Y))# 输出class listclass list_iterator123从上述示例中我们可以看出两点通过iter函数把list转化成了迭代器可迭代器能够记住遍历位置能够通过next方法不断从前往后访问除了Python内置的iter之外还可以通过Python内置的工具包itertools创建迭代器其中函数包括countcyclerepeataccumulatechaincompressdropwhileisliceproductpermutationscombinations……itertools中包含很多用于创建迭代器的实用方法如果感兴趣嗯可以访问官方文档进行详细了解。当然也可以自己通过实现__iter__和__next__方法来定义迭代器class Iterator(object):    def __init__(self, array):        self.x  array        self.index  0    def __iter__(self):        return self    def __next__(self):        if self.index             value  self.x[self.index]            self.index  1        else:            raise StopIteration        return valueit  Iterator([1,2,3,4,5])print(type(it))for i in it:    print(i)# 输出class __main__.Iterator12345生成器从文章开头的流程图可以直观的看出生成器是迭代器的子集换句话说生成器一定是迭代器但是迭代器不全是生成器对象。提及生成器就不得不提及一个Python中的关键字yiled在Python中一个函数可以用yiled替代return返回值这样的话这个函数就变成了一个生成器对象举个例子对比一下def generator(array):    for i in array:        return igen  generator([1,2,3,4,5])print(type(gen))# 输出class int这是我们常见的return返回方式这样的话generator函数获取的是一个int型对象下面看一下换成yield关键字def generator(array):    for i in array:        yield(i)gen  generator([1,2,3,4,5])print(type(gen))# 输出class generator这样的话获取的是一个生成器generator除了yield之外在Python3.3之后还加入了yield from获取生成器允许一个生成器将其部分操作委派给另一个生成器使得生成器的用法变得更加简洁yield from后面需要加上可迭代对象这样可以把可迭代对象变成生成器当然这里的可迭代对象不仅包含列表、元组还包含迭代器、生成器。yield from相对于yield的有几个主要优点代码更加简洁可以用于生成器嵌套易于异常处理下面就从简洁代码方面举个例子说明一下def generator(array):    for sub_array in array:        yield from sub_arraygen  generator([(1,2,3), (4,5,6,7)])# 输出1234567当我们需要访问多层/多维可迭代对象时我们就不需要逐层的去用for … in …去访问可以简单的通过yiled from把生成器委派给子生成器除此之外还可以通过生成器表达式的方法得到生成式后面会介绍。print(next(gen))print(next(gen))# 输出12通过上面示例可以看出生成器可以像迭代器那样使用iter和next方法。读到这里可以会有疑惑从这个示例看来生成器和迭代器并没有什么区别啊为什么生成器还可以称得上是Python中的一大亮点首先它对比于迭代器在编码方面更加简洁这是显而易见的其次生成器运行速度更快最后一点也是需要着重说明的一点节省内存。也许在一些理论性实验、学术论文阶段可以不考虑这些工程化的问题但是在公司做项目时内存和资源占用是无法逃避的问题 。如果我们使用其他可迭代对象处理庞大的数据时当创建或者返回值时会申请用于存储整个可迭代对象的内存显然这是非常浪费的因为有的元素当前我们用不到也不会去访问但它却一直占用这内存。这时候就体现了生成器的优点它不是一次性把所有的结果都返回而是当我们每读取一次它会返回一个结果当我们不读取时它就是一个生成器表达式几乎不占用内存。生成器表达式首先来看一个对比示例X  [1, 2, 3, 4, 5]it  [i for i in X]gen  (i for i in X)print(type(X))print(type(it))print(type(gen))# 输出class listclass listclass generator首先说一下it [i for i in X]这种用法叫做列表生成式在很多编程规范中非常推崇的一种替代for循环的方式仔细看一下代码会发现it [i for i in X]与gen (i for i in X)的区别非常小只是一个用了中括号一个用了小括号但是它们的区别缺失非常大的使用中括号的叫做列表生成式获得的返回值是一个列表而使用小括号叫做生成器表达式获得的返回结果是一个生成器这也是前面提到的除了使用yield和yield from两个关键字外还可以使用生成器表达式获得生成器。▲END有趣的灵魂在等你 长按扫码可关注 相关文章【进阶Python】第一讲开篇【进阶Python】第二讲装饰器【进阶Python】第三讲类的特殊方法(上篇)【进阶Python】第四讲类的特殊方法(下篇)文章好看就点这里
http://wiki.neutronadmin.com/news/110053/

相关文章:

  • 自建网站备案通过后怎么做宁波网络公司董事长
  • 网站开发网页跳转到新的页面网站建设和管理情况自查报告
  • 新乡做网站的公司oa系统下载
  • php网站连接数据库教程济南物流公司网站建设
  • 贵金属如何用网站开发客户油漆涂料网站建设
  • 如何引用404做网站网站平台建设哪家公司好
  • 建设网站需要哪些费用电商培训机构需要什么资质
  • 广州淘宝网站建设开发板推荐
  • 互联网公司响应式网站周口网站制作哪家好
  • 苏州网站建设caiyiduo百度关键词搜索怎么弄
  • 基金会网站开发方案网站项目上线流程
  • 做网站需要做手机版吗广东东莞地图
  • 机票最便宜网站建设小米路由器建设网站
  • 松江移动网站建设小程序开发平台哪种品牌的好
  • 中国书画画廊网站模板杭州网站制作模板
  • 网站建设工作不足及整改网络推广外包注意哪些
  • 笔记本电脑可以做网站服务器重庆做网站设计
  • 专业手机网站制作哪家好现在有什么有效的引流方法
  • 大连品牌网站建设公司深圳招聘官网
  • 企业网站建设方讯做临时网站
  • 寻花问柳一家专门做男人的网站可以建微信网站的
  • 5118网站如何使用免费版建一个网站需要哪些东西
  • 做外贸上哪些网站找客户镇江网站建设 找思创
  • 炫酷网站有哪些打电话叫人做网站
  • 北京网站建设网络公司域名如何注册?
  • 用新华做网站名是否侵权seo优化的价格
  • ...无锡网站制作上海专业的网站建
  • 网站运营知识旅游电子商务的三创赛网站建设
  • 备案停止网站dede网站如何换logo
  • 做网站相册移动端网站建设的方案