python學習 38迭代器和生成器

2022-09-02 06:42:08 字數 2118 閱讀 1986

迭代器和生成器

---- 迭代器協議和for迴圈工作機制

1.迭代器協議:物件必須提供乙個next方法,執行該方法要麼返回迭代中的下一項,要麼引起乙個stoplteration異常,以終止迭代(只能往後走,不能往前走)

2.可迭代物件:實現了迭代器的物件(如何實現:物件內部定義乙個_iter_()方法)

3.協議是一種約定,可迭代物件實現了迭代器協議,python的內部工具(如:for迴圈,sum,min,max函式等)使用迭代器協議訪問物件。

dic =

iter_d=dic.__iter__() #

相當於for迴圈的迭代。 列表,字典,檔案等有_iter_()方法的都可以

print(iter_d.__next__

())

for迴圈的本質:迴圈所有物件,全部都是使用的迭代協議

-for迴圈機制也可以用while表示

a=[1,2,3,4,5]

iter_a=a.__iter__

()while

true:

try:

print(iter_a.__next__

())

except

stopasynciteration:

print('迭代完畢,迴圈終止')

break

-迭代器原理

1.

a = [1,2,3,4,5]

iter_a=a.__iter__() #

切換為迭代器形式

print(iter_a.__next__

())print(iter_a.__next__

())print(iter_a.__next__

())print(iter_a.__next__

())print(iter_a.__next__())

執行結果:

123

45process finished with exit code 0

2.用next方法

a = [1,2,3,4,5]

iter_a=a.__iter__() #

切換為迭代器形式

print

(next(iter_a))

print

(next(iter_a))

print

(next(iter_a))

print

(next(iter_a))

print(next(iter_a))

執行結果是一樣的

只要遵循迭代器協議,那就是可迭代物件。

------ 初識生成器

可以理解為一種資料型別。這種資料型別自動實現了迭代器協議(其他的資料型別需要呼叫自己內建的_iter_方法),所以生成器就是可迭代物件。

--生成器表現形式:

1.生成器函式

def

test():

yield

1g=test()

print(g) #

生成器記憶體位址

print(g.__next__())

執行結果:

1

process finished with exit code 0

2.生成器表示式

res=(i for i in range(11))

print(res.__next__

())print(res.__next__())

執行結果:

0

1process finished with exit code 0

ps:三元表示式

name='

john

'res='1'

if name == '

john

'else'2

'#如果name='john',返回1,不是則返回2

print(res)

執行結果:

1process finished with exit code 0

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

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

doraemon的python 迭代器與生成器

6.9.1迭代器的定義 自己不用寫,只需要學會用 迭代器 對可迭代物件中的元素進行逐一獲取,表象 具有 next 方法且每次呼叫都獲取可迭代物件中的元素 從前到後乙個個獲取 迭代器想要獲取每個值,就必須反覆執行 v1 11,22,33,44 列表轉化成迭代器 v2 iter v1 result v2...

Python學習 迭代器

含義迭代的意思類似於迴圈,每一次重複的過程被稱為一次迭代的過程,而每一次迭代得到的結果會被用來作為下一次迭代的初始值 提供迭代方法的容器稱為迭代器,常用的迭代器 列表 元組 字串 字典。示例 1 字串 字串就是乙個容器,同時也是乙個迭代器,for 語句的作用就是觸發這個迭代器的迭代功能,每次從容器裡...