python迭代器详解,python中什么是迭代器

  python迭代器详解,python中什么是迭代器

  迭代程序

  迭代器可以简单理解为for循环。除了for循环之外,Python还准备了另一种访问集合元素的方法。

  特点:

  一个可以记住遍历位置的对象。

  迭代器从集合的第一个元素开始访问,直到访问完所有元素。

  迭代器只能向前,不能向后。

  但是判断一个对象是否有迭代器,Python除了是否可以使用for循环之外,还为我们提供了一个更专业的方法,—— isinstance()。

  我们可以使用isinstance()来确定当前对象是否可以迭代。

  在使用迭代器之前,需要先介绍一下,因为迭代器不是Python的内置方法。

  from collections . ABC importable

  print(isinstance(极客挖掘,Iterable))

  print(isinstance([],Iterable))

  print(isinstance([],Iterable))

  print(is instance({ xforxinrange(5)},Iterable))

  print(is instance(123,Iterable))打印结果如下:

  真实的

  真实的

  真实的

  真实的

  false这里有一个小问题。注意,当我们引入Iterable时,以前的版本是由from collections import Iterable引入的,但是在Python3.7中抛出了一个异常,如下所示:

  d :/Development/Projects/python-learning/base-ITER/demo . py :1: deprecationwarn : usingoriimporttheabc

  “从”

  collections 而不是collections.abc 被解压缩,3.8将停止工作

  FromcollectionsimportIterable的意思是这个引入方法在Python3.8中会停止使用,现在Python3.8已经发布了,我们就根据提示引入,使用FromcollectionsimportIterable。

  在迭代器中,最重要的方法一定是next()。从名字就可以看出,它的功能是next。

  现在让我们尝试遍历一个列表:

  列表1=[1,2,3,4]

  next(list1)的执行结果:

  回溯(mostrecentcalllast):

  文件“d :/Development/Projects/python-learning/base-ITER/demo . py”,第12行,在模块中

  下一个(列表1)

  type : List objectsinotiterator没说好的列表可以迭代吗?为什么它又报错了?

  这位同学,冷静一下,看看错误信息是怎么说的。这是为了提醒我们列表不是迭代器。

  所以,可迭代对象不一定是迭代器!

  我们导入迭代器模块,先把列表转换成迭代器,然后再试一次。

  list1=iter(list1)

  打印的执行结果(类型(列表1)):

  从类型的角度来看,类“list_iterator”是一个可以迭代的列表。让我们再次尝试next()方法。

  打印(下一个(列表1))

  打印(下一个(列表1))

  打印(下一个(列表1))

  打印的执行结果(next(list1)):

  一个

  2

  三

  看,现在可以正常打印了。

  我们刚刚迭代了整个列表中的元素。如果这个时候再迭代会怎么样?

  打印的执行结果(next(list1)):

  回溯(mostrecentcalllast):

  文件“d :/Development/Projects/python-learning/base-ITER/demo . py”,第23行,在模块中

  打印(下一个(列表1))

  StopIteration看到它,会抛出StopIteration异常。

  正如你在这里看到的,人们仍然觉得迭代器没有用。我再给你举个例子。如果我们现在有一个set set,我想一个一个的获取里面的元素,那么迭代器就派上用场了。因为在集合中,没有索引。如果想得到某个值,只能用for来循环整个集合,但是有了迭代器,我们就不需要循环整个集合了。

  集合1={1,2,3,4,5}

  集合1=iter(集合1)

  打印(下一个(设置1))

  打印(下一个(设置1))

  打印(下一个(设置1))

  打印(下一个(设置1))

  打印(下一个(set1))我不发布结果。每个人都应该知道结果。

  此外,迭代器有一个巨大的优势,那就是在迭代之前,不需要准备所有的元素。迭代器只在迭代到一个元素时才开始计算它。在那之前或之后,元素不能存在或被消灭。

  这个特性使得它在遍历一些大型集合时具有很大的优势。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

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