python迭代器入門

2021-10-16 12:19:16 字數 2431 閱讀 2930

迭代器是乙個可以記住遍歷的位置的物件。

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

可以使用 hasattr()判斷物件是否是「可迭代的」

>>

>

hasattr

(str

,'__iter__'

)true

使用內建函式 iter 定義迭代器物件。

>>

> lst=[1

,2,3

,4]>>

> iter_lst=

iter

(lst)

>>

> iter_lst

>

從返回結果看,iter_lst引用的是迭代器物件,那麼那麼iter_lst 和 lst這兩個物件有什麼異同點呢?

>>

>

hasattr

(lst,

"__iter__"

)true

>>

>

hasattr

(iter_lst,

"__iter__"

)true

相同點:都有"__iter__"說明2著都是可迭代的

>>

>

hasattr

(lst,

"__next__"

)false

>>

>

hasattr

(iter_lst,

"__next__"

)true

不同點:迭代器物件必須有"__next__"方法。

>>

> iter_lst.__next__()1

>>

> iter_lst.__next__()2

.>>

> iter_lst.__next__()3

>>

> iter_lst.__next__()4

>>

> iter_lst.__next__(

)traceback (most recent call last)

: file ""

, line 1,in

iter_lst.__next__(

)stopiteration

每執行一次__next__方法,迭代器就有乙個蒜素被讀入記憶體。列表則是一次性被讀入記憶體。這說明迭代器iter_lst比列表lst節省了記憶體,所以你懂得。對於元素數量很大或者每個元素比較大的物件,迭代器就很有優勢了。

當迴圈到最後乙個元素,在執行__next__方法,會丟擲stopiteration異常。

>>

>

for i in iter_lst:

print

(i)>>

>

如果承接前面的操作,對iter_lst使用for迴圈,則不會丟擲異常(for迴圈語句會自動捕捉並處理stopiteration異常),但是也沒有列印出內容,這是因為迭代器迴圈到最後乙個物件後,不會自動回到最開始。

為了方便理解,可以假設有乙個「指標」,當這個指標指到**,**的元素就被讀取。每次執行__next__方法時就是「指標」指向後乙個元素的位置,永遠也指不到當前元素,所以不執行。

>>

> iter_lst =

iter

(lst)

>>

>

for i in iter_lst:

print

(i)123

4

在python中有乙個與迭代器物件類似的內建方法next,它的作用就是返回迭代器物件中指標位置的元素,並向後移動。

>>

>

next

(iter_lst)

#承接前面的操作,所以報異常。

traceback (most recent call last)

: file ""

, line 1,in

next

(iter_lst)

stopiteration

>>

> iter_lst =

iter

(lst)

>>

>

next

(iter_lst)

1>>

>

next

(iter_lst)

2>>

>

參考資料《python大學實用教程》

Python入門之迭代器

可迭代物件 iterable 可以直接作用於for迴圈的物件統稱為可迭代物件 使用isinstance 判斷乙個物件是否是iterable物件 from collections import iterable isinstance iterable true isinstance iterable ...

python基礎入門 迭代器

迭代是python最強大的功能之一,是訪問集合元素的一種方式。迭代器是乙個可以記住遍歷的位置的物件。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。迭代器有兩個基本的方法 iter 和 next 字串,列表或元組物件都可用於建立迭代器 list 1,2,3,...

python 迭代器 python迭代器

迭代器 可以直接作用for迴圈的資料型別 我們已經知道,可以直接作用for迴圈的資料型別有以下幾種 一類是集合資料型別 如 list tuple dict set str等 一類是generator,包括生成器和帶yield的generator function 可迭代物件定義 這些可以直接作用fo...