Python基礎9,迭代器和生成器

2021-10-22 18:24:44 字數 2534 閱讀 4223

1,迭代器

dict1 =

print

(dir

(dict1)

)

迭代:重複同乙個動作

list1  =[1

,2,3

,4,5

]print

(dir

(list1)

)for i in list1:

print

(i)

index =

0while index <

len(list1)

:print

(list

[index]

) index +=

1

從可迭代物件生成了乙個迭代器

凡是有__iter__方法,是可迭代物件

可迭代物件包含了迭代器

a =

iter

(list1)

print

(a)# 迭代器物件

print

(dir

(a))

for迭代原理:

try

:while

true

:print

(next

(a))

except stopiteration:

pass

可迭代物件__iter__

迭代器物件__iter__next

2,生成器函式

def func1:

yield

1b = func1(

)print

(b)# generator生成器

print

(next

(b))

# 通過next啟用yield的執行

deffunc2()

:yield

1yield

2yield

3yield

4c = func2(

)# 顯式的迭代協議

print

(next

(c))

print

(next

(c))

# 隱式的迭代協議

dor i in c:

print

('for'

)print

(i)def

func3()

:print

('一'

)yield

1print

('二'

)yield

2print

('三'

)yield

3d = func3(

)print

(next

(d))

每次next取值,只啟用一次yield

生成器函式和普通函式的區別和聯絡:

相同點:

1,定義格式相同,都是使用def語句

2,二者都可以有return語句,也可以沒有

3,函式體格式相同

不同點:

1,生成器函式中主要是用yield返回資料,而函式主要使用return返回資料。二者返回值不同,函式可以根據需要返回任何型別,生成器函式執行返回。

2,函式呼叫會執行**,生成器不會,等待next啟用**

斐波那契數列:數列當中每乙個值都等於前面兩個數相加的值

[1,1,2,3,5,7,13,21…]

def

fibo

(n):

i,a b =0,

1,1while i < n:

yield a

a,b = b,a+b

i+=1d = fibo(10)

for i in d:

print

(i)

import time

print

('hello'

)time.sleep(3)

print

('hello2'

)

import datetime

print

(datetime.datetime.now())

from datetime import datetime # 匯入部分模組

print

(datetime.now())

from datetime import datetime as dt #別名

print

(dt.now(

))

import test

test.a(

)print

(test.__name__)

#檔名

if __name__ ==

'__main__'

:print

(__name__)

python基礎 可迭代物件和迭代器和生成器

參考自 參考自 可迭代物件 iterable 可直接作用於for迴圈的物件的統稱,如list tuple dict set str 生成器等。可以用isinstance 判斷乙個物件是否為iterable from collections import iterable isinstance ite...

Python基礎 迭代器和生成器

迭代器用於 直譯器需要迭代物件x時,會自動呼叫iter x 內建的iter函式,有以下功能 檢查物件是否實現了 iter 方法,如果實現了就呼叫它,獲取乙個迭代器。如果沒有實現 iter 方法,但是實現了 getitem 方法,python 會建立乙個迭代器,嘗試按順序 從索引 0 開始 獲取元素。...

Python基礎 迭代器和生成器

一 可迭代物件 在python中,我們已經知道,可以直接作用於for迴圈的資料型別有以下幾種 一類是集合資料型別,如list tuple dict set str等 一類是generator,包括生成器和帶yield的generator function。這些可以直接作用於for迴圈的物件統稱為可迭...