重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
python中迭代器与生成器的区别?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
成都创新互联公司服务项目包括新区网站建设、新区网站制作、新区网页制作以及新区网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,新区网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到新区省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!迭代器
我们先从迭代器开始入手,迭代器并不是Python独有的概念,在C++和Java当中都有iterator的概念,两者的使用也都差不多。迭代器主要解决了一个问题,在一个复杂场景下,获取数据怎么尽可能简便。
我们来假设一个场景,假设我们从某个数据源获取了一批数据。然后我们需要调用前一万条生成一个结果,得到结果之后,我们要将剩下的数据交给另一个调用方去处理。这个过程看起来非常平常,但是隐藏了两个问题,第一个问题是如果我们能保证第一次处理的时候,每次都是使用一万条还好说,如果我们使用的条数是一个动态的值呢?显然,我们需要一个变量来记录我们究竟用了多少条数据,和这批数据的状态。其次,如果这个数据量很大会存在一个数据传输的问题。我们每次都要将一大批数据传来传去,显然会消耗很多资源。
还有一个场景是如果我们开发的是一个比较复杂的数据结构,比如一棵多叉树,下游想要遍历它的时候,必须要了解它的实现原理才行。这显然也不太友好。
迭代器的出现正是针对以上这些问题,它的含义也很简单,有点像是我们遍历链表的时候用到的cur的指针。永远指向当前的位置,永远知道下一个位置在哪里。
容器迭代器
我们先从简单的元素迭代器开始了解它的用途,我们都知道Python当中经典的几个容器:list
, tuple
和dict
。它们都是一个可迭代对象,我们可以直接使用关键字iter获取一个对应的迭代器。
我们来看一个例子:
arr = [1, 3, 4, 5, 9] it = iter(arr) print(next(it)) print(next(it))