Python 中 iterator 和 iterable 的區別是什麼?

時間 2021-06-02 07:00:10

1樓:司馬弈

Python中 list,truple,str,dict這些都可以被迭代,但他們並不是迭代器。為什麼?

因為和迭代器相比有乙個很大的不同,list/truple/map/dict這些資料的大小是確定的,也就是說有多少是可知的。但迭代器不是,迭代器不知道要執行多少次,所以可以理解為不知道有多少個元素,每呼叫一次next(),就會往下走一步,是惰性的。

判斷是不是可以迭代,用Iterable

from

collections

import

Iterable

isinstance

({},

Iterable

)-->

True

isinstance

((),

Iterable

)-->

True

isinstance

(100

,Iterable

)-->

False

判斷是不是迭代器,用Iterator

from collections import Iterator

isinstance({}, Iterator) -->False

isinstance((), Iterator) -->False

isinstance( (xforxinrange(10)), Iterator) -->True

所以,凡是可以for迴圈的,都是Iterable

凡是可以next()的,都是Iterator

集合資料型別如list,truple,dict,str,都是Itrable不是Iterator,但可以通過iter()函式獲得乙個Iterator物件

Python中的for迴圈就是通過next實現的

2樓:tearshark

不懂Python,早就忘光了。

其實就是字面意思,這本該是英語理解問題。

其他語言也有類似的,IEnumerator和IEnumeratable。

3樓:引力微子球

有問題就多看看文件:https://

docs.python.org/3/glossary.html#term-iterable如果這個答案有什麼地方不對的話,以文件為準。

iterable,根據文件中的定義,指的是那些可以把自己的成員乙個乙個返回(或者說遍歷自己的成員)的一類物件(這裡的成員不是類成員的那種成員,而更類似於元素)。只要有__iter__()或者__getitem__()(類似於operator)定義的物件都是iterable。

乙個iterator物件就是我們所謂的迭代器,你可以把它傳給next()或者呼叫它的__next__()來獲得下乙個元素。按照Python的要求,iterator的__iter__()應當返回其自身,因此iterator也是乙個Iterable。

一般而言你不需要直接操作iterator,for迴圈會幫你搞定的。

4樓:小張

可迭代物件呼叫__iter__方法返回乙個迭代器迭代器總是可迭代物件, 迭代器的__iter__方法返回selfiterable :

可迭代物件, 實現了__iter__方法, 該方法返回乙個迭代器iterator

即x是可迭代物件, y和z是迭代器

>>>x=

[1,2

,3]>>>y=

iter(x

)>>>z=

iter(x

)>>>

next(y

)1>>>

next(y

)2>>>

next(z

)1>>>

type(x

)

'list

'>>>>type(y

)

'list_iterator

'>>>>type

(iter(y

))

'list_iterator

'>iterator :

1, 迭代器實現了__next__和__iter__方法, 並使__iter__方法返回self ( 即迭代器總是乙個可迭代物件)

2, 迭代器持有乙個內部狀態, 用於確定下次迭代的返回值3, 迭代器不會一次性把所有元素載入到記憶體中, 就像乙個懶載入工廠, 在呼叫__next__方法的時候才返回下乙個元素 x=

[1,2

,3]for

eleminx

:...

執行時 :

原文 :

python 中關於serve forever函式

文刀天可 我的理解是serve socketserver使用多執行緒的話,應該是要使用 ThreadingTCPServer這個類,這個類繼承了ThreadingMixIn類和TCPServer類,其中ThreadingMixIn類才是處理執行緒的,而serve forever是通過TCPServe...

Python中除了matplotlib外還有哪些資料視覺化的庫?

野客 說幾種 matplotlib 之外相對比較常見的 Python 視覺化庫吧。1.pyecharts pyecharts 是將 Python 與 ECharts 結合的視覺化庫,用於通過 Python 生成 Echarts 圖表。繪製玫瑰圖等常見疫情圖 超詳細 pyecharts1.x 教程 2...

在Python中,parameters與argument有什麼不同?

levi a parameter is a variable which we use in the function definition that is a handle that allows the code in the function to access the arguments f...