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...