針對於理解yield,那麼首先了解迭代器,生成器,最後去了解yield
# 執行函式mylist = [1,2,3
]for i in
mylist:
print(i)
輸出結果:12
3
這裡的mylist是乙個可迭代物件,當你使用乙個列表生成式來建立乙個列表的時候,就建立了乙個可迭代的物件:
# 使用列表生成式新增的乙個mylist2mylist2 = [x*x for x in range(1,4
)]for j in
mylist2:
print(j)
生成器是可以迭代的,但是你只可以讀取它一次 , 因為它並不把所有的值放在記憶體中,它是實時地生成資料,栗子:
def creategenerator():mylist = (x * x for x in range(1, 4
))
for z in
mylist:
yield
zif __name__ == '
__main__':
mygenerator =creategenerator()
for i in
mygenerator:
print(i)
creategenerator()這個函式就是生成器,我把它賦值給乙個變數mygenerator ,在使用for迴圈輸出,也可以在python consele控制台進行next(mygenerator)進行乙個乙個的輸出;
tips:迭代是乙個實現可迭代物件(實現的是 `__iter__()` 方法)和迭代器(實現的是 `__next__()` 方法)的過程。
可迭代物件是你可以從其獲取到乙個迭代器的任一物件。迭代器是那些允許你迭代可迭代物件的物件。
因為迭代器的資料不在記憶體中,一次只給出乙個返回值,使用return(返回全部的)無法獲取到我們想要的值,所以使用yield可以中斷並返回這個值;
舉個栗子,實現楊輝三角10層:
# 楊輝三角的實現@@@@@@@def creatgenerator():
x = [1
]
for i in range(0,10
):
yieldx0
) x = [x[k] + x[k-1] for k in range(i+2
)]zz =creatgenerator()
for i in
zz: print(i)
輸出結果為:
[1][1, 1][
1, 2, 1][
1, 3, 3, 1][
1, 4, 6, 4, 1][
1, 5, 10, 10, 5, 1][
1, 6, 15, 20, 15, 6, 1][
1, 7, 21, 35, 35, 21, 7, 1][
1, 8, 28, 56, 70, 56, 28, 8, 1][
1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
**不是很完善,有錯誤還請指正,定當修改~
Python3(高階特性)
1.例題答案 小寫化含有數字的list l2 s.lower for s in l1 if isinstance s,str true l2.insert key,value for key,value in enumerate l1 if isinstance value,int true l2注...
Python3 高階特性
可迭代物件 集合資料型別 list tuple dict set str generator,包括生成器和帶yield的generator function 可以採用collections模組的iterable型別判斷是否是可迭代物件 from collections import iterable...
Python3 基礎 高階特性 迭代器
凡是可作用於for迴圈的物件都是iterable型別 凡是可作用於next 函式的物件都是iterator型別,它們表示乙個惰性計算的序列 集合資料型別如list dict str等是iterable但不是iterator,不過可以通過iter 函式獲得乙個iterator物件。python的for...