Python迭代對象與迭代器


一.迭代對象

1.概念

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

2.可以直接作用於for循環的數據類型

(1)集合類數據類型,如list, tuple, dict, set, str等

(2)generator,包括生成器和帶yield的generator function.

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

3.判斷一個對象是不是可迭代對象(Iterable)

可以使用isinstance,需要導入模塊
from collections import Iterator
from collections import Iterable

(1)判斷 str 類型是不是可迭代對象
isinstance('',Iterable)
isinstance('abc',Iterable)
print(isinstance('',Iterable)) # True
print(isinstance('abc',Iterable)) # True
(2)判斷 list 類型是不是可迭代對象
isinstance([],Iterable)
isinstance([1,2,3,4],Iterable)
print(isinstance([],Iterable)) # True
print(isinstance([1,2,3,4],Iterable)) # True
(3)判斷 元組 類型是不是可迭代對象
isinstance(tuple(),Iterable)
isinstance((1,2,3,4),Iterable)
print(isinstance(tuple(),Iterable))
print(isinstance((1,2,3,4),Iterable))
(4)判斷 集合 類型是不是可迭代對象
isinstance(set(),Iterable)
isinstance((1,2,3,4),Iterable)
print(isinstance(set(),Iterable)) # True
print(isinstance((1,2,3,4),Iterable)) # True
(5)判斷 字典 類型是不是可迭代對象
isinstance({},Iterable)
isinstance({'name':'wanghua','age':28},Iterable)
print(isinstance({},Iterable)) # True
print(isinstance({'name':'wanghua','age':28},Iterable)) # True
(6)判斷 for 循環是不是可迭代對象
isinstance((x for x in range(10)), Iterable)
print(isinstance((x for x in range(10)), Iterator)) # True

二. 迭代器

1.概念

迭代器:可以被next()函數調用並不斷返回下一個值的對象稱為迭代器:Iterator。
迭代器是在python2.2中被加入的,它為類序列對象提供了一個類序列的接口。有了迭代器可以迭代一個不是序列的對象,因為他表現出了序列的行為。當在python中使用for循環迭代一個對象時,調用者幾乎分辨不出他迭代的是一個迭代器對象還是一個序列對象,因為python讓他(迭代器)像一個序列那樣操作。

2.判斷一個對象是否是迭代器(Iterator). 可以使用isinstance,需要導入模塊from collections import Iterator

3.判斷 for 循環是不是迭代器

isinstance((x for x in range(10)), Iterator)
print(isinstance((x for x in range(10)), Iterator)) # True
成器都是Iterator對象,但list、dict、str雖然是Iterable,卻不是Iterator。
把list、dict、str等Iterable變成Iterator可以使用iter()函數:

>>> isinstance(iter([]), Iterator)
True
>>> isinstance(iter('abc'), Iterator)
True

你可能會問,為什么list、dict、str等數據類型不是Iterator?

這是因為Python的Iterator對象表示的是一個數據流,Iterator對象可以被next()函數調用並不斷返回下一個數據,直到沒有數據時拋出StopIteration錯誤。可以把這個數據流看做是一個有序序列,但我們卻不能提前知道序列的長度,只能不斷通過next()函數實現按需計算下一個數據,所以Iterator的計算是惰性的,只有在需要返回下一個數據時它才會計算。

Iterator甚至可以表示一個無限大的數據流,例如全體自然數。而使用list是永遠不可能存儲全體自然數的


免責聲明!

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



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