python學習筆記十四 迭代器

2022-08-20 08:00:08 字數 3669 閱讀 6740

迭代是python最強大的功能之一,是訪問集合元素的一種方式。

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

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

迭代器有兩個基本的方法:iter()next()

字串,列表或元組物件都可用於建立迭代器:

>>>list=[1,2,3,4]

>>> it = iter(list) #

建立迭代器物件

>>> print (next(it)) #

輸出迭代器的下乙個元素

1>>> print

(next(it))

2>>>

迭代器物件可以使用常規for語句進行遍歷:

#

!/usr/bin/python3

list=[1,2,3,4]

it = iter(list) #

建立迭代器物件

for x in

it:

print (x, end="

")執行以上程式,輸出結果如下:

>>> 1234

也可以使用 next() 函式:

#

!/usr/bin/python3

import sys #

引入 sys 模組

list=[1,2,3,4]

it = iter(list) #

建立迭代器物件

while

true:

try:

print

(next(it))

except

stopiteration:

sys.exit()

執行結果:

>>> 1 2 3 4

把乙個類作為乙個迭代器使用需要在類中實現兩個方法 __iter__() 與 __next__() 。

如果你已經了解的物件導向程式設計,就知道類都有乙個建構函式,python 的建構函式為 __init__(), 它會在物件初始化的時候執行。

__iter__() 方法返回乙個特殊的迭代器物件, 這個迭代器物件實現了 __next__() 方法並通過 stopiteration 異常標識迭代的完成。

__next__() 方法(python 2 裡是 next())會返回下乙個迭代器物件。

建立乙個返回數字的迭代器,初始值為 1,逐步遞增 1:

class

mynumbers:

def__iter__

(self):

self.a = 1

return

self

def__next__

(self):

x =self.a

self.a += 1

returnx

myclass =mynumbers()

myiter =iter(myclass)

print

(next(myiter))

print

(next(myiter))

print

(next(myiter))

print

(next(myiter))

print(next(myiter))

執行輸出結果為:

>>> 1 2 3 4 5

stopiteration 異常用於標識迭代的完成,防止出現無限迴圈的情況,在 __next__() 方法中我們可以設定在完成指定迴圈次數後觸發 stopiteration 異常來結束迭代。

在 20 次迭代後停止執行:

class

mynumbers:

def__iter__

(self):

self.a = 1

return

self

def__next__

(self):

if self.a <= 20:

x =self.a

self.a += 1

return

x

else

:

raise

stopiteration

myclass =mynumbers()

myiter =iter(myclass)

for x in

myiter:

print

(x)執行結果:

>>>1 到 20

後記:前文提到:字串,列表或元組物件都可用於建立迭代器。

字串(strings):

普通的舊字串也是可迭代的。

for s in

"hello":

print(s, end= ' ')

結果為:

>>> h e l l o

列表(lists):

這些可能是最明顯的迭代。

for x in [none,3,4.5,"

foo",lambda : "

moo"

,object,object()]:

print ("

()".format(x,type(x)))

輸出結果為:

none()3()4.5()foo  ()()()()

元組(tuples):

元組在某些基本方面與列表不同,注意到以下示例中的可迭代物件使用圓括號而不是方括號,但輸出與上面列表示例的輸出相同。

for x in (none,3,4.5,"

foo",lambda : "

moo"

,object,object()):

print ("

()".format(x,type(x)))

輸出結果為:

none (

'nonetype

'>)

3 ('

int'>)

4.5 ('

float

'>)

foo (

'str

'>)

lambda> at 0x7feec7fa7578> ('

function

'>)

'object

'> ('

type

'>)

('object

'>)

字典(dictionaries):

字典是鍵值對的無序列表。當您使用for迴圈遍歷字典時,您的虛擬變數將使用各種鍵填充。

d =

for skey in

d:

print

"( are

".format(skey,d[skey]))

輸出結果為:

brussel sprouts are evil

cauliflower are pretty good

bananas are the best

也許不是這個順序,字典是無序的!!!

C 學習筆記(二十四)迭代器

迭代器 迭代器是自動生成可列舉型別和列舉數的結構。1.迭代器塊 迭代器塊是有乙個或多個yield語句的 塊。方法主體 訪問器主體 運算子主體都可以是迭代器塊。迭代器塊不需要同一時間內執行一串行的命令式語句,而是描述編譯器建立列舉數類的行為。yield return 語句執行了序列中返回的下一項。yi...

Python學習筆記 迭代器

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

Python學習筆記 迭代器和迭代器協議

術語概念解釋 關於 for 迴圈 寫乙個迭代器 1 迭代器協議 迭代器協議是一種約定,即物件必須提供乙個 next 方法,執行該方法要麼返回迭代中的下一項,要麼丟擲乙個 stopiteration 異常,終止迭代。2 迭代器 iterator 迭代器是一種物件,一種可以被 next 函式呼叫並不斷返...