Iterable And Iterator

可迭代物與迭代器

Posted by 劉啟仲 on Thursday, January 21, 2021

可迭代物件

列表、元組、字串、字典…,可以使用for迴圈一個一個輪詢的稱為可迭代物件(Iterable),那這個過程稱為iterate over,每一回輪詢就是iteration

x = [1, 2, 3]
for i in x:
  print(i)

迭代器有兩個基本的方法:iter( ) 和 next( )。 我們使用iter(iterable)即可把可迭代物件轉換成迭代器 使用next(iterator)來獲取迭代器的下一個值

x = [1, 2, 3]
print(dir(x))
# ['__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
it = x.__iter__() # 也可寫成 it = iter(x)
print(dir(it))
# ['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__length_hint__', '__lt__', '__ne__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__']
print(it.__next__()) # 也可寫成 next(it)
# 1
print(it.__next__())
# 2
print(it.__next__())
# 3
print(it.__next__())
# Traceback (most recent call last):
#   File "<stdin>", line 1, in <module>
# StopIteration