生成器,生成器推導式和列表推導式

2022-05-17 03:00:53 字數 1196 閱讀 2581

python社群,大部分生成器和迭代器是一種.生成器的本質是迭代器.

唯一區別:生成器是我們自己用python**構建的資料結構.迭代器都是提供的,或者轉化得來的.

- 生成器函式

- 生成器表示式

- python提供的

- yield

- 乙個next 對應乙個yield(yield和下乙個yield中間有**的話只執行乙個next時,會停在第乙個yield處)

def s():

li=[1,2,3,4,5]

for i in li:

yeild i

yield 與 return的區別

- return:函式中只存在乙個被執行的return,結束函式,並且給給函式的執行者返回值.

- yield:只要有yiedl那麼她就是生成器函式而不是函式了.生成器函式中可以存在多個yield,乙個yield對應乙個next

- yield 和return 可以同時存在,如果return先執行了,next()會取不成值.會報錯

yield from

- 將li這個列表變成了乙個迭代器返回.每乙個next返回乙個列表乙個元素

- 優化了內層迴圈,降低了時間複雜度.提高開發效率

def gen_fun():

li = [1,2,3,4,5,6]

yield from li

ret = gen_fun()

print(next(ret))

print(next(ret))

print(next(ret)) 依次返回列表元素

列表推到式

- 迴圈模式:[變數(加工後的變數) for 變數 in iterable]

[a for a in [1,2,3]]

- 篩選模式:[變數(加工後的變數) for 變數 in iterable if 條件]

[a for a in [1,2,3] if a>2]

生成器表示式

與列表推導式的寫法幾乎一模一樣,也有篩選和迴圈模式.也可以多層迴圈構建

將列表 變成() 就變成生成器

推導式 生成器

1.推導式生成列表 表示式 for item in 可迭代物件 或者 表示式 for item in 可迭代物件 if 條件判斷 推導式生成列表 ls x for x in range 1,5 if x 2 0 2,4 2.生成器生成元組 表示式 for item in 可迭代物件 或者 表示式 f...

生成器 推導式

建立生成器的方法 1.通過生成器函式 yield 2.生成器表示式 def func1 x sum 0 for i in range 1,x x 1 yield xg func1 6 生成器函式對 print g 表示這是乙個迭代器print g.next 乙個next對應乙個yield print...

生成器及列表推導式

迭代器 內部含有 iter next 方法的物件 可迭代物件不能取值,因為內部沒有 next 的方法 迭代器的優點 1 節省記憶體 2 惰性機制 3 單向 不可逆 如何判斷可迭代物件 迭代器 1 iter in dir obj 2 引用乙個模組 from collections import ite...