从零开始学python | Python迭代器:什么是Python中的迭代器,以及如何使用它?

举报
Yuchuan 发表于 2021/04/17 23:10:34 2021/04/17
【摘要】 这使我们到了本文的结尾,在这里我们学习了如何将Python迭代器与示例一起使用。我希望您对本教程中与您共享的所有内容一清二楚。 

Python编程语言已经扩展了创新的方方面面,包括机器学习数据科学人工智能等。实现这一壮举的众多原因之一是Python迭代器之类的概念,而这些概念正是Python取得编程成功的基石。语。在本文中,我们将通过以下概念来理解Python迭代器:

迭代器与可迭代

Python中可以用作Iterable对象的对象称为Iterable。这基本上意味着可以迭代对象中的序列。大多数Python集合(例如listdictionarytuplesets,甚至range)都可以视为Iterable。

什么是Python迭代器?

Python I加速器是一个包含可数数量的值的容器。可以使用迭代器遍历容器中的值,尤其是列表。

除了遍历之外,迭代器还提供对容器中数据元素的访问,但它本身并不执行 迭代,即,在使用该概念或琐碎使用术语时,没有一定程度的自由。Iterator的 行为几乎类似于数据库游标。这是Python中Iterator的简单示例。  

my_obj = {"Edureka", "Python", "iterator"}
iter_obj = iter(my_obj)
print(next(iter_obj))

输出: Edureka

迭代器是可以与“ for循环”一起使用的任何类型的Python。任何用作迭代器的对象都必须实现以下方法。

python中的迭代器-edureka

1. __iter __()

在初始化Iterator时调用它。它应该返回一个具有next或__next__方法的对象。

2. __next __() 

Iterator的next方法返回Iterable的下一个值。 

当Iterator与“ for in”循环一起使用时,在Iterator对象上,for循环隐式调用next()。此方法应使用StopIteration来指示迭代结束。这两种方法一起被称为迭代器协议。让我们尝试通过一个示例来了解for循环如何在Python中充当迭代器。

for i in object:
     print(i)

让我们了解for循环如何作为迭代器。

# create an iterator object from that iterable
iter_obj = iter(iterable)
 
# infinite loop
while True:
    try:
        # get the next item
        element = next(iter_obj)
        # do something with element
    except StopIteration:
        # if StopIteration is raised, break from loop
        break

现在我们知道了,for循环如何作为迭代器工作。让我们了解如何在Python中实现自定义迭代器。

自定义迭代器

现在让我们看一下如何在Python中实现自定义迭代器。为了理解这一点,我们将使用一个示例。在此示例中,我们将实现__iter __()和__next __()方法。

class MyNumbers:
  def __iter__(self):
    self.a = 1
    return self
 
  def __next__(self):
    x = self.a
    self.a += 1
    return x
 
myclass = MyNumbers()
myiter = iter(myclass)
 
print(next(myiter))
print(next(myiter))
print(next(myiter))

输出: 1

        2

        3

现在我们知道了如何实现自定义迭代器,让我们看一下Python中的无限迭代器。

无限迭代器

Iterator对象中的项目不一定要用尽。可以有无限个迭代器(永无休止)。这是一个演示无限迭代器的基本示例。

内置 函数 iter()可以使用两个参数来调用,其中第一个参数必须是可以调用的对象(函数),第二个必须是哨兵。迭代器将调用此函数,直到返回的值等于前哨值为止。

让我们以一个例子来理解这一点

class MyNumbers:
  def __iter__(self):
    self.a = 1
    return self
  
  def __next__(self):
    x = self.a
    self.a += 1
    return x
  
myclass = MyNumbers()
myiter = iter(myclass)
  
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))

输出: 1
        2
        3
        4
        5

在上面的示例中,只要我们继续添加print语句,执行就会继续。要停止无限迭代器,我们需要使用stopIteration语句。

StopIteration

为了永远停止迭代,我们使用StopIteration语句。让我们通过一些示例来理解这一点。

class MyNumbers:
  def __iter__(self):
    self.a = 1
    return self
  
  def __next__(self):
    if self.a <= 5:
      x = self.a
      self.a += 1
      return x
    else:
      raise StopIteration
  
myclass = MyNumbers()
myiter = iter(myclass)
  
for x in myiter:
  print(x)

输出: 1
        2
        3
        4
        5

现在,如果if语句条件为false,则执行将移至else块,并且迭代将停止。现在,让我们看一下Python中的其他迭代器示例。

Python迭代器示例

这是Python中迭代器的更多示例。

my_obj = ["Edureka", "python", "iterator"]
iter_obj = iter(my_obj)
print(next(iter_obj))

输出: Edureka

在此示例中,我们将元组用作可迭代对象。

my_obj = ("Edureka", "python", "iterator")
iter_obj = iter(my_obj)
print(next(iter_obj))

输出: Edureka

我们甚至可以将字符串用作python中的可迭代对象。

my_obj = "Edureka"
iter_obj = iter(my_obj)
print(next(iter_obj))

输出: E

这使我们到了本文的结尾,在这里我们学习了如何将Python迭代器与示例一起使用。我希望您对本教程中与您共享的所有内容一清二楚。 

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。