Python中的iter函数,python中iter函数的用法
Python迭代器
迭代器是可以重复的对象。在本教程中,您将学习迭代器如何工作,以及如何使用__iter__和__next__方法构建自己的迭代器。
Python的迭代器是什么?
Python中迭代器无处不在。它们通过for循环、理解、生成器等优雅地实现。而是藏在眼皮底下。
Python迭代器是一个可重复的对象。一次返回一个元素的数据的对象。
从技术上讲,Python迭代器对象必须通过组合__iter__()和__next__()来实现两个特殊的方法,这两个方法称为迭代器协议。
如果一个迭代器可以从一个对象中获得,这个对象称为可重复的。Python内置的很多容器都是可重复的,比如list、tuple、string。
Iter (function(即__iter__))方法)会从中返回迭代器。
用Python迭代器迭代
这个next))函数手动遍历迭代器中的所有项。当我们最终到达时,没有更多返回的数据,这将导致StopIteration。下面是一个例子。
示例#定义列表
我的列表=[ 4,7,0,3 ]
使用iter()获取迭代器
my _ Iter=Iter(my _ list))))))))))my _ Iter=Iter(my _ list))))))my))my))65)
使用iter()获取迭代器
#输出4
print(next ) my_Iter))
#产出7
print(next ) my_Iter))
#next(obj)与obj相同。__下一个_ _)
#输出0
打印(我的_Iter。__下一个_ _())
#输出3
打印(我的_Iter。__下一个_ _())
#这导致了一个错误,没有留下任何项目
下一个(我的条目)
更好的自动迭代方式是使用for循环。这样,你可以迭代地返回迭代器中的任何对象,比如列表、字符串或文件。forelementinmy_list:(元素))。
四
七
0
三
for循环实际上是如何工作的?
如上例所示,for循环可以自动遍历列表。
事实上,for循环可以重复任何可重复的对象。让我们仔细看看在Python中实际实现循环的方式。可预测的:
对#元素做些什么
其实已经实现了。创建迭代器iterable
ITER(iterable)).
#无限循环
whileTrue:
尝试:
#获得以下信息
元素=下一个(ITER _对象)
对#元素做些什么
异常停止迭代:
当StopIteration被触发时,它从循环的开始处被中断。
黑色
因此,在内部,for循环通过调用iterable中的iter()来创建迭代器的iter _ obj。
讽刺的是,这个for循环实际上是一个无限while循环。
在循环中,next))调用以获取下一个元素,并使用该值执行for循环的主体。使用完所有项后,StopIteration将被抛出,在内部被捕获,然后循环结束。请注意,所有其他类型的异常都将通过。
用Python构建你自己的迭代器
在Python中从头开始构建迭代器很简单。你只需要实现这些方法__iter__()和__next__()。
__iter__()方法返回迭代器对象本身。如果需要,可以执行一些初始化。
__next__()方法必须返回序列中的下一项。当到达终点时,以及在后续调用中,必须触发StopIteration。
以下示例为每次迭代提供了2的幂。功率指数从0到用户设置的数字。
示例classPowTwo:
实现“”迭代器的类
的力量
def__init__(self,max=0):
self.max=max
def__iter__(self):
self.n=0
返回
def__next__(自己) :
ifself.n=self.max:
结果=2**self.n
self.n=1
返回结果
否则:
提高生产率
现在,我们可以创建一个迭代器,迭代如下。a=PowTwo(4)
i=iter(a)
下一个(我)
一个
下一个(我)
2
下一个(我)
四
下一个(我)
八
下一个(我)
16
下一个(我)
回溯(mostrecentcalllast):
.
停止迭代
我们也可以使用for循环来迭代迭代器类。对于iinPowTwo(5):
.打印(一)
.
一个
2
四
八
16
32
Python迭代器
迭代器对象中的项不必被穷尽。可能有无限个迭代器(永远不会结束)。在处理这样的迭代器时,我们必须小心。
这是一个演示无限迭代器的简单例子。
内置函数iter()可以用两个参数调用,其中第一个参数必须是可调用对象(函数),第二个参数是标记。迭代器调用这个函数,直到返回值等于标记值。int()
0
inf=iter(int,1)
下一步(信息)
0
下一步(信息)
0
我们可以看到int()函数总是返回0。因此,将其作为iter(int,1)传递将返回一个调用int()的迭代器,直到返回值等于1。这永远不会发生,我们得到一个无限迭代器。
我们也可以构建自己的无限迭代器。理论上,下面的迭代器将返回所有奇数。
示例类别过滤器:
无限迭代器返回所有
奇数
def__iter__(self):
self.num=1
回归自我
def__next__(自己):
编号=self.num
self.num=2
returnnum
操作如下。a=iter(InfIter())
下一个(a)
一个
下一个(a)
三
下一个(a)
五
下一个(a)
七
等等.
在对这些类型的无限迭代器进行迭代时,要注意包含终止条件。
使用迭代器的好处是节省资源。如上图所示,我们可以得到所有奇数,而不需要将整个数字系统存储在内存中。理论上,我们可以在有限的内存中包含无限的项目。
迭代器也让我们的代码看起来很酷。
在Python中有一种创建迭代器的简单方法。要了解更多信息,请访问:Python generator yield。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。