可迭代對象(Iterable)和迭代器(Iterator)


 迭代是訪問集合元素的一種方式。

迭代器是一個可以記住遍歷的位置的對象。

迭代器對象從集合的第一 個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會后退。

1. 可迭代對象 以直接作用於 for 循環的數據類型有以下幾種:

  一類是集合數據類型,如 list 、 tuple 、 dict 、 set 、 str 等;

  一類是 generator ,包括生成器和帶 yield 的generator function。

這些可以直接作用於 for 循環的對象統稱為可迭代對象: Iterable 。

2. 判斷是否可以迭代 可以使用 isinstance() 判斷一個對象是否是 Iterable 對象:

from collections import Iterable

print(isinstance([],Iterable)) # 列表 True
print(isinstance((),Iterable)) # 元組 True
print(isinstance({},Iterable)) # 字典 True
print(isinstance('meng',Iterable)) #字符串 True
print(isinstance((x for x in range(5)),Iterable)) #生成器 True

結果為:都為True, 說明容器和生成器都是可迭代對象

3. 迭代器:

from collections import Iterator

print(isinstance([],Iterator))  # 列表  False
print(isinstance((),Iterator))  # 元組  False
print(isinstance({},Iterator))  # 字典  False
print(isinstance('meng',Iterator))  # 字符串  False
print(isinstance((x for x in range(5)),Iterator)) # 生成器  True

由此結果可以看出:容器只是可迭代對象,並不是迭代器

4. iter()函數:

生成器都是 Iterator 對象,但 list 、 dict 、 str 雖然是 Iterable ,卻不是 Iterator 。 把 list 、 dict 、 str 等 Iterable 變成 Iterator 可以使用 iter() 函數:

print(isinstance(iter([]),Iterator))  # 列表  True

總結:

  凡是可作用於 for 循環的對象都是 Iterable 類型;

  凡是可作用於 next() 函數的對象都是 Iterator 類型

  集合數據類型如 list 、 dict 、 str 等是 Iterable 但不是 Iterator ,不過可以通過 iter() 函數獲得一個


免責聲明!

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



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