首页 > 编程知识 正文

python中递归是什么意思,Python中的iter函数

时间:2023-05-06 01:03:20 阅读:148815 作者:2244

Python迭代器

迭代器是可以重复的对象。 在本教程中,您将学习迭代器的工作方式以及如何使用__iter__和__next__方法构建自己的迭代器。

Python的迭代器是什么?

迭代器在Python无处不在。 它们通过for循环、理解、生成器等优雅地实现,但隐藏在眼皮底下。

Python迭代器是一个可重复的对象。 一次返回一个元素的返回数据的对象。

从技术上讲,Python迭代器对象必须通过组合__iter__ ()和__next__ ()实现两种特殊的方法,称为迭代器协议。

如果迭代器可从对象中获得,则对象称为可重复。 许多内置在Python中的容器是可重复的,例如list、tuple和string。

iter (函数(即__iter__ ) )方法)会从它们返回迭代器。

使用Python迭代器进行迭代

此next ) )函数手动遍历迭代器中的所有项目。 当我们最后到达,没有更多的返回数据时,它会引起StopIteration。 以下是一个例子。

示例#定义列表

my _ list=[ 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.__next__ )相同

#输出0

print(my_Iter.__next__ () )

#输出3

print(my_Iter.__next__ () )

#这导致了错误,没有项目剩下

next(my_Iter )

自动迭代的一个更优雅的方法是使用for循环。 通过这种方法,可以迭代地返回迭代器中的任何对象,如列表、字符串或文件。 forelementinmy_list:

. (元素) )。

.

4

7

0

3

for循环实际上是如何工作的?

如上面的示例所示,for循环可以自动遍历列表。

实际上,for循环可以重复任何可重复的对象。 让我们仔细看看for在Python中实际实现循环的方式。 forelementiniterable:

对#元素做点什么

实际上已经实现了。 创建迭代器的iterable

iter_obj=ITER(iterable ) )。

#无限循环

whileTrue:

try:

#获取以下内容

element=next(ITER_obj )

对#元素做点什么

exceptStopIteration:

诱发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__(self ) :

ifself.n=self.max:

result=2**self.n

self.n=1

返回结果

else:

raiseStopIteration

>

现在,我们可以创建一个迭代器,并如下进行迭代。>>> a = PowTwo(4)

>>> i = iter(a)

>>> next(i)

1

>>> next(i)

2

>>> next(i)

4

>>> next(i)

8

>>> next(i)

16

>>> next(i)

Traceback (most recent call last):

...

StopIteration

我们还可以使用for循环来迭代迭代器类。>>> for i in PowTwo(5):

...     print(i)

...

1

2

4

8

16

32

Python无限迭代器

迭代器对象中的项不必耗尽。可能有无限的迭代器(永远不会结束)。在处理这样的迭代器时,我们必须小心。

这是一个演示无限迭代器的简单示例。

内置函数 iter()可以用两个参数调用,其中第一个参数必须是可调用对象(函数),第二个参数是标记。迭代器调用这个函数,直到返回的值等于标记值为止。>>> int()

0

>>> inf = iter(int,1)

>>> next(inf)

0

>>> next(inf)

0

我们可以看到int()函数始终返回0。因此,将其作为iter(int,1)传递将返回一个迭代器,该迭代器调用int()直到返回值等于1。这永远不会发生,并且我们得到一个无限迭代器。

我们还可以构建自己的无限迭代器。理论上,以下迭代器将返回所有奇数。

示例class InfIter:

"""无限迭代器返回所有

奇数"""

def __iter__(self):

self.num = 1

return self

def __next__(self):

num = self.num

self.num += 2

return num

运行如下。>>> a = iter(InfIter())

>>> next(a)

1

>>> next(a)

3

>>> next(a)

5

>>> next(a)

7

等等...

在这些类型的无限迭代器上进行迭代时,请小心包含终止条件。

使用迭代器的优点是节省了资源。如上所示,我们无需将整个数字系统存储在内存中就可以获得所有奇数。从理论上讲,我们可以在有限内存中包含无限项。

迭代器还使我们的代码看起来很酷。

有一种在Python中创建迭代器的简便方法。要了解更多信息,请访问:Python生成器yield。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。