Python中的iter函数,python中iter函数的用法

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: