Python系列 (6)迭代器 生成器

2021-10-04 04:45:28 字數 1997 閱讀 3166

1、迭代概念

2、判斷物件是否是可迭代物件

from collections.abc import iterable

li =[1

,2,'3'

]tup =

('a'

,'b'

)dic =

print

(isinstance

(li,iterable)

)print

(isinstance

('abc'

,iterable)

)print

(isinstance

(tup,iterable)

)print

(isinstance

(dic,iterable)

)

3、迭代器
from collections.abc import iterator

isinstance([

],iterator)

false

isinstance

(,iterator)

false

isinstance

('ab'

,iterator)

false

可以看到列表、字典、字串都不是迭代器,但他們是可迭代物件

isinstance

((i for i in

range(10

)),iterator)

true

可以看到生成器都是迭代器

1、生成器概念

舉個例子:在python中,我要讀取乙個列表,需要建立乙個連續的記憶體空間,用來儲存列表中的所有的元素,在使用生成器的時候,就不需要一開始就讀取整個列表的所有元素,不需要向作業系統申請巨大的連續記憶體空間來儲存列表中的所有元素,因為列表中的元素是按照某種演算法推算出來的,在迴圈過程中,不斷的推算後續元素,節約了記憶體空間

2、建立生成器

方法一:

gen =

(i for i in

range(10

))

方法二:

def

fib(

max)

: n,a,b =1,

0,1while n <=

max:

yield b

a,b = b,a+b

n=n+

1return

'done'

函式型生成器,每次執行到 yield 語句時會停止,返回yield 定義的變數,下一次next() 呼叫時,從 yield 語句的下乙個語句開始執行

3、呼叫生成器

gen =

(i for i in

range(10

))next

(gen)

0next

(gen)

1next

(gen)

2

gen =

(i for i in

range(10

))for i in gen:

print

(i)012

3456

789

for i in[1

,2,3

]pass

# 等價於

it=iter([

1,2,

3])# 先變成 iterator

while

true

:# 迴圈

try:

x=next

(it)

# 獲取下乙個值

except stopiteration:

break

# 遇到 stopiteration 報錯就退出迴圈

python系列之 迭代器 生成器

1 迭代器 iterator 迭代器是訪問集合元素的一種方式,迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退,不過這也沒什麼,因為人們很少在迭代途中往後退。迭代器的好處是,迭代器在返回資料的時候是每次返回集合中的乙個元素,而不是一次將所有的元素全部提取到記憶...

Python 迭代器 生成器

可以直接作用於for迴圈的物件,統稱為可迭代物件 iterable。iterator物件表示的是乙個資料流,iterator物件可以被next 函式呼叫並不斷返回下乙個資料,直到沒有資料時丟擲stopiteration錯誤。可以把這個資料流看做是乙個有序序列,但我們卻不能提前知道序列的長度,只能不斷...

python 迭代器,生成器

什麼事迭代 可直接用作與for迴圈的物件統稱為可迭代物件 可以被next 函式呼叫,並不斷返回下乙個值的物件稱為迭代器,所有的iterable均可以通過內建函式iter 來轉變為iterator。對於迭代器來講,有乙個next 就夠了。在你使用for和in語句時,程式就會自動呼叫即將被處理的物件的可...