標籤:__iter__ 計算 col 中斷 append 迴圈 style log 資料
【1】清單產生器:列表產生式就是一個用來產生列表的特定文法形式的運算式。
1.基礎語句結構:[exp for iter_var in iterable例如:a=[f(x) for x in range(10)]
2.工作過程:
迭代iterable中的每個元素;每次迭代都先把結果賦值給iter_var,然後通過exp得到一個新的計算值;最後把所有通過exp得到的計算值以一個新列表的形式返回。
相當於這樣的過程:L = []
for iter_var in iterable:
L.append(exp)
詳情介紹:https://www.cnblogs.com/yyds/p/6281453.html
【3】產生器:
1.作用:按照某種演算法不斷產生新的資料,直到滿足某一個指定的條件結束。
構造產生器的兩種方式:
- 使用類似列表產生式的方式產生 (2*n + 1 for n in range(3, 11))
- 使用包含yield的函數來產生
產生器的執行過程:
在執行過程中,遇到yield關鍵字就會中斷執行,下次調用則繼續從上次中斷的位置繼續執行。
產生器的特性:
- 只有在調用時才會產生相應的資料
- 只記錄當前的位置
- 只能next,不能prev
產生器的調用
要調用產生器產生新的元素,有兩種方式:
- 調用內建的next()方法
- 使用迴圈對產生器對象進行遍曆(推薦)
- 調用產生器對象的send()方法
# print(list(range(10)))# s=(x*2 for x in range(10))# print(s)#<generator object <genexpr> at 0x000001EBD2E2CFC0>產生器對象# for i in s:## #print(s.__next__())# print(next(s),i)#等價於s.__next__()取下一個元素# print(next(s))# print(next(s))#產生器就是一個可迭代對象(Iterable)#產生器一共兩種建立方式#1(x*2 for x in range(5))#2.yieIddef foo(): print(‘ok‘) yield 1 print(‘ok2‘) yield 2g=foo()# print(g)# for i in foo():# print(i)# next(g)# next(g)#什麼是可迭代對象(是否有_iter_)l=[1,2,3]l.__iter__()def fid(max): n,before,after=0,0,1 while n<max: yield before,after=after,before+after n=n+1fid(5)
Python列表產生式和產生器