高级迭代器,迭代器对象

先上代码:代码传送门

首先这是一段对于python迭代器的内部实现逻辑的简单介绍。适合有一些python基础的pythoner。大神除外。其中有不足之处望指正。一起进步。

自然语言处理,人工智能,当面对这些高大上的名词时,会发现一个很尴尬的问题。庞大的数据量和有限的内存资源之间存在着不可调和的矛盾。解决这个矛盾,python有着天然的优势。正是因为python中有一个被称之为迭代器的概念。


关于如何使用迭代器和什么是迭代很多前辈已经做了很详细的介绍,同时在官方的文档中也有相关的内容。这里不在赘述。简单来说这里只是针对为什么python迭代器可以解决在文字开头提出的矛盾。


python中的一切都是一个对象。我们操作的都是对每一个对象的引用关系。比如一个列表,我们操作的就是对这个列表的引用关系。而列表中存放的也不是真实的一个个的元素,而是这些元素的引用关系。当创建一个列表时,计算机内部会把这些元素的引用关系存入列表中。也就是说当我们创建一个列表时,列表中的元素也会随之创建。这就回占用计算内存资源。这是一般情况下大多数编程语言的实现逻辑也是这样。

不同的是,python中迭代器同样也创建一个可迭代的列表。当我们执行完迭代器的创建操作时,此时的可迭代列表并不存在。

如图


图中l1和l2同样时创建了两个可以迭代的(0,9999)列表。

但是对于列表l1却占用了87600k的内存空间。而对于使用迭代器创建的列表l2来说只占用了不到48k。从这里可以看出迭代器对计算机资源的使用上的优势。

之所以出现这样的情况这是因为迭代器在创建之后并没有真的真生成一个列表在计算机内存中。当我们向迭代器取数据时,迭代器此时才会生成一条我们需要的数据给我们。这种现用现生成的模式让我们对计算机的有限的内存资源做了很有效的利用,同时也能提供较快的数据处理速度。


那么迭代器究竟是如何实现的呢?请回页首,点击传送门,就可以看到一个简单的迭代的实现类。

在一个容器类中,只要存在__iter__(self) 和__next__(self) 这两个函数。那么这个类就可以当作一个迭代器来使用。

函数__iter__(self) 用来初始化迭代器。在这个函数中可以设置迭代器的起始位置。以及其他一些需要在迭代器开始设置的参数。

函数__next__(self) 用来描述迭代器的迭代协议。用过来规定迭代的规则。以及什么时候应该结束迭代。

以上就是我对迭代器的一些浅见。不足之处望指正,gmclqb@163.com。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值