Python/python iterators

来自菜鸟教程
跳转至:导航、​搜索

<languages />

Python迭代器

Python迭代器

迭代器是一个对象,其中包含可计数的值。

迭代器是可以迭代的对象,这意味着您可以遍历所有值。

从技术上讲,在Python中,迭代器是实现迭代器协议的对象,该协议由以下方法组成 __iter__() and __next__() .

迭代器vs可迭代

列表,元组,字典和集合都是可迭代的对象。他们是可迭代的 containers 您可以从中获得迭代器。

所有这些对象都有一个 iter() 用于获得迭代器的方法:

从元组返回一个迭代器,并打印每个值:

    mytuple = ("apple", "banana", "cherry")
myit = iter(mytuple)


    print(next(myit))
print(next(myit))
print(next(myit))

甚至字符串都是可迭代的对象,并且可以返回迭代器:

字符串也是可迭代的对象,包含一系列字符:

    mystr = "banana"
myit = iter(mystr)


    print(next(myit))
print(next(myit))
print(next(myit))

    print(next(myit))
print(next(myit))
print(next(myit))

遍历迭代器

我们也可以使用 for 循环遍历可迭代对象:

迭代一个元组的值:

    mytuple = ("apple", "banana", "cherry")


for x in mytuple:

      print(x)

迭代字符串的字符:

    mystr = "banana"


for x in mystr:

      print(x)

The for 循环实际上创建了一个迭代器对象,并为每个循环执行next()方法。

创建一个迭代器

要将对象/类创建为迭代器,必须实现方法 __iter__() and __next__() 对你的对象。

正如您在中学到的 Python类/对象

本章中,所有类都有一个称为 __init__() ,它使您可以在创建对象时进行一些初始化。

The __iter__() 方法的行为类似,您可以执行操作(初始化等),但必须始终返回迭代器对象本身。

The __next__() 方法还允许您执行操作,并且必须返回序列中的下一项。

创建一个返回数字(从1开始)的迭代器,每个序列将增加一个(返回1,2,3,4,5等):

  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))

StopIteration

如果您有足够的next()语句,或者如果在 for 环。

为了防止迭代永远进行,我们可以使用 StopIteration 声明。

在里面 __next__() 方法,如果迭代执行了指定的次数,我们可以添加终止条件以引发错误:

在20次迭代后停止:

  class MyNumbers:
  def __iter__(self):
    self.a = 
  1
    return self

  def __next__(self):
    
  if self.a <= 20:
      x = self.a
      
  self.a += 1
      return x
    
  else:
      raise StopIteration

myclass = 
  MyNumbers()
myiter = iter(myclass)

for x in myiter:
  
  print(x)