Python 迭代器(Iterator)


版權所有,未經許可,禁止轉載


章節


Python 迭代器(Iterator)

迭代器是一個包含有限數量值的對象。

迭代器是一個可以被迭代的對象,可以遍歷迭代器中的所有值。

從技術上講,在Python中,迭代器是實現迭代器協議的對象,該協議由方法__iter__()__next__()組成。

可迭代的數據類型

列表、元組、字典和集合都是可迭代的對象,可以從其中獲得迭代器。

所有這些對象都可用iter()方法獲取迭代器:

示例

從元組中獲取一個迭代器,遍歷並打印每個值:

mytuple = ("自行車", "汽車", "高鐵")
myit = iter(mytuple)

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

字符串也是可迭代對象,可以從中獲取迭代器:

示例

使用迭代器遍歷字符串:

mystr = "自行車"
myit = iter(mystr)

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

for循環迭代

我們也可以使用for循環來遍歷一個迭代器:

示例

迭代元組的值:

mytuple = ("自行車", "汽車", "高鐵")

for x in mytuple:
  print(x)

示例

迭代字符串的字符:

mystr = "自行車"

for x in mystr:
  print(x)

for循環內部實際上進行了迭代器的獲取,及next()方法的調用。

創建迭代器

一個對象要創建迭代器,變成可迭代的,必須實現方法:__iter__()__next__()

__iter__()方法必須始終返回迭代器對象本身。

__next__()方法必須返回序列中的下一項。

示例

創建一個返回數字的迭代器,從1開始,每個序列項遞增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()調用將永遠繼續,我們可以使用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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM