python教程 迭代器,生成器與for迴圈機制

2021-10-10 06:47:24 字數 2340 閱讀 9916

一:什麼是迭代器協議

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

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

二:for迴圈機制

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

三:什麼是生成器

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

2. 生成器分類:在python中有兩種表現形式(python有兩種不同的方式提供生成器)

生成器函式:常規函式定義,但是,使用yield語句而不是return語句返回結果,yield語句一次返回乙個結果,在每個結果中間,掛起函式的狀態,以便於下次從它離開的地方繼續執行。

def

test()

:yield

1yield

2yield

3res=test(

)print

(res)

print

(res.__next__())

print

(res.__next__())

#結果:

# 1

# 2

生成器表示式:類似於列表推導,但是生成器返回按需產生結果的乙個物件,而不是一次構建乙個結果列表。

laomuji=

('雞蛋%d'

%i for i in

range(10

))print

(laomuji)

print

(laomuji.__next__())

print

(laomuji.__next__())

print

(laomuji.__next__())

print

(next

(laomuji)

)print

(next

(laomuji)

)#結果:at 0x0000015f1262d8e0>

# 雞蛋0

# 雞蛋1

# 雞蛋2

# 雞蛋3

# 雞蛋4

3.列表解析:

'''

'''egg_list=

for i in

range(10

):'雞蛋%d'

%i)print

(egg_list)

#結果:['雞蛋0', '雞蛋1', '雞蛋2', '雞蛋3', '雞蛋4', '雞蛋5', '雞蛋6', '雞蛋7', '雞蛋8', '雞蛋9']

列表解析:l=[

'雞蛋%d'

%i for i in

range(10

)]print

(l)#結果:['雞蛋0', '雞蛋1', '雞蛋2', '雞蛋3', '雞蛋4', '雞蛋5', '雞蛋6', '雞蛋7', '雞蛋8', '雞蛋9']

#列表解析將即將生成的列表結果放前面,for迴圈放在後面

三元表示式:(三個操作,for迴圈前面是乙個,for迴圈是乙個,if條件這是乙個)

l1=[

'雞蛋%d'

%i for i in

range(10

)if i>5]

print

(l1)

#結果:['雞蛋6', '雞蛋7', '雞蛋8', '雞蛋9']

#沒有四元表示式

總結:

1.把列表解析的換成()得到的就是生成器表示式

2.列表解析與生成器表示式都是一種便利的變成方式,只不過生成器表示式更加節省記憶體

3.python不但使用迭代器協議讓for迴圈更加通用。大部分內建函式也是使用迭代器協議訪問物件的。例如,sum函式是python的內建函式,該函式使用迭代器協議訪問物件,而生成器實現了迭代器協議,所以,我們可以直接計算一系列值得和:

sum

(x**

2for x in

range(4

))

而不用多此一舉的先構造乙個列表:

sum

([x**

2for x in

range(4

)])

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關鍵字判斷元素是否...