python基礎 迭代器與生成器

2021-10-02 12:41:02 字數 2647 閱讀 6940

迭代是訪問集合元素的一種方式。

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

迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。

迭代器只能往前不會後退

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

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

>>

> list=[1

,2,3

,4]>>

> it =

iter

(list) # 建立迭代器物件

>>

> print (

next

(it)

) # 輸出迭代器的下乙個元素

1>>

> print (

next

(it))2

>>

>

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

list=[1

,2,3

,4]it =

iter

(list) # 建立迭代器物件

for x in it:

print (x, end=

" ")

輸出結果:12

34

或者用next()函式

import sys         # 引入 sys 模組

list=[1

,2,3

,4]it =

iter

(list) # 建立迭代器物件

while true:

try:

print (

next

(it)

) except stopiteration:

sys.

exit()

輸出結果:12

34

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

() 與 __next__

() 。

__iter__

() 方法返回乙個特殊的迭代器物件, 這個迭代器物件實現了 __next__

() 方法並通過 stopiteration 異常標識迭代的完成。

__next__

() 方法(python 2 裡是 next

())會返回下乙個迭代器物件。

stopiteration 異常用於標識迭代的完成,防止出現無限迴圈的情況,在 __next__

() 方法中我們可以設定在完成指定迴圈次數後觸發 stopiteration 異常來結束迭代。

在 20 次迭代後停止執行:

class mynumbers:

def __iter__

(self)

: self.a =

1return 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)輸出結果:12

3456

78910

1112

1314

1516

1718

1920

使用了 yield 的函式被稱為生成器(generator)。

跟普通函式不同的是,生成器是乙個返回迭代器的函式,只能用於迭代操作,更簡單點理解生成器就是乙個迭代器。

在呼叫生成器執行的過程中,每次遇到 yield 時函式會暫停並儲存當前所有的執行資訊,返回 yield 的值, 並在下一次執行 next() 方法時從當前位置繼續執行。

呼叫乙個生成器函式,返回的是乙個迭代器物件。

#使用 yield 實現斐波那契數列:

#!/usr/bin/python3

import sys

def fibonacci

(n): # 生成器函式 - 斐波那契

a, b, counter =0,

1,0while true:

if(counter > n)

:return

yield a

a, b = b, a + b

counter +=1

f =fibonacci(10

) # f 是乙個迭代器,由生成器返回生成

while true:

try:

print (

next

(f), end=

" ")

except stopiteration:

sys.

exit()

輸出結果:01

1235

8132134

55

python基礎 迭代器與生成器

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

python基礎 迭代器 與 生成器

迭代器1.是一種訪問集合元素的方式。2.可以記住遍歷位置 3.從集合的第乙個元素開始訪問,到最後乙個元素訪問完結束。不能後退。4.兩個基本方法 iter 和 next 也可以理解為有這兩個方法就是迭代器 5.字串 列表 元組 都可以用於建立迭代器 6.支援用for進行遍歷 list1 2,4,543...

Python生成器與迭代器

生成器只有在用的時候會出現在記憶體中,對比列表全部存在記憶體中,減少了記憶體占用 next 函式 依次取生成器的值 s x 2 for x in range 1000 中括號是列表解析,小括號表示生成一系列值,就是生成器 s at 0x7fa20aa8b048 print next s 用next ...