08 Python迭代器與生成器

2021-10-07 09:42:37 字數 2601 閱讀 3523

什麼是迭代器

可迭代物件

也就是說:

字串、列表、元組物件等暫時不是迭代器,暫時不能被迭代。但是,它們成為迭代器之後就可以被迭代了,如for迴圈。

利用可迭代物件iterable建立迭代器iterator
l=[1

,2,3

,4]#l:可迭代物件

i=iter

(l)#i:迭代器

print

(next

(i))

#輸出1

print

(next

(i))

#輸出2

print

(i.__next__())

#輸出3

解釋:

注意:

遍歷完畢後,若再次呼叫next()函式,則會丟擲異常:stopiteration,處理此異常即可。

處理stopiteration異常
try

: l=[1

,2] i=

iter

(l)print

(next

(i))

#輸出1

print

(next

(i))

#輸出2

print

(next

(i))

#丟擲異常

except stopiteration as stopiteration:

print

("遍歷完成"

)

刨析for迴圈
for迴圈實現了序列的遍歷,那它怎麼實現的呢?

for迴圈做的三件事:

建立迭代器

呼叫next方法

處理stopiteration異常

模擬for迴圈:

a=

[100

,200

,300

,400

,500]j=

none

i=iter

(a)#1.建立迭代器

while

(true):

try:

j=next

(i)#2.呼叫next方法

except stopiteration as stopiteration:

#3.處理stopiteration異常

break

print

(j)

結果:

100

200300

400500

什麼是生成器?

生成式生成器

a=

(x*x for x in

range(4

))print

(next

(a))

#輸出0

print

("---------------------"

)for i in a:

#輸出1、4、9

print

(i)

解釋:

函式生成器

def

get():

yield

1yield

2g=get(

)print

(next

(g))

#輸出1

print

(next

(g))

#輸出2

解釋:

函式生成器-send

def

func()

: count1 =

yield

1print

("count1="

, count1)

count2 =

yield

2print

("count2="

, count2)

yield

3g = func(

)print

(g.send(

none))

print

(g.send(2)

)

結果:

1

count1=

22

解釋:

可以得到無限多個斐波那契序列中的元素:

def

fib():

a=1 b=

1yield a

yield b

while

(true):

yield a+b

temp=a+b

a=bb=temp

f = fib(

)for i in

range(10

):print

(next

(f),end=

" ")

結果:

112

35813

2134

55

Python生成器與迭代器

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

python 迭代器與生成器

迭代器和生成器 print 1 in 1,2,3 print 1 not in 1,2,3 print 4 in print 4 not in 1,2,3 print x not in dlkjfxfei 可迭代物件 iterable 可以被next 函式呼叫並不斷返回下乙個值 知道沒有資料時丟擲s...

Python 迭代器與生成器

一 迭代器 理解迭代器需要搞清楚容器 container 迭代器協議 可迭代物件 iterable 迭代器 iterator 生成器 generator 1 容器 container 容器是一種把多個元素組織在一起的資料結構,容器中的元素可以逐個地迭代獲取,可以用in,not in關鍵字判斷元素是否...