生成器 推導式

2022-04-25 08:01:06 字數 1894 閱讀 9606

建立生成器的方法:

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(g.__next__

())print(g.__next__

())print(g.__next__

())

print(g.__next__

())

#7 8 9 10 11

#yiedld 將值返回給生成器物件.__next__()

yield 的作用:1.乙個next對應乙個yield

2.yield將值返回給生成器物件.__next__()

return的作用是結束函式,給函式的執行者返回值

yield 不會結束函式,乙個next對應乙個yield,給__next__()返回值

區別1:自定製的區別

l1 = [1,2,4]

l2 = l1.__iter__

()def

func1(x):

x += 1

yield

x x += 2

yield

x x += 3

yield

xg = func1(5)

print(g.__next__

())print(g.__next__())

區別2:記憶體級別的區別

迭代器是需要將可迭代物件進行轉化,可迭代物件非常佔記憶體

生成器是直接建立,不需要轉化,從本質上就節省記憶體

send與nxet一樣,也是對生成器取值(執行乙個yield)的方法

send 可以給上乙個yield 進行傳值

第一次取值永遠都是next

最後乙個yield 永遠也得不到send傳的值

迴圈模式 :[變數(加工後的變數) for 變數 in iterable(可迭代物件)]

l1 = [i for i in range(1,10)]

print(l1) #

[1, 2, 3, 4, 5, 6, 7, 8, 9]

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

l2 = [i for i in range(1,10) if i%2 ==0]

print(l2) #

[2, 4, 6, 8]

列表推導式優點:一行解決,方便

缺點:容易著迷,不易拍錯,不能超過三次迴圈

列表推導式不能解決所有的列表的問題,所有不要太刻意使用

l1 = ( i for i in range(1,1000000))

print(l1.__next__()) #

1print(l1.__next__()) #

2print(l1.__next__

())print(l1.__next__

())print(l1.__next__()) #5#

可以通過迴圈列印一定數量的取值

mcase = 

mcase_frequency =

print(mcase_frequency) #

sq = 

print(sq) #

#自帶去重功能

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

python社群,大部分生成器和迭代器是一種 生成器的本質是迭代器 唯一區別 生成器是我們自己用python 構建的資料結構 迭代器都是提供的,或者轉化得來的 生成器函式 生成器表示式 python提供的 yield 乙個next 對應乙個yield yield和下乙個yield中間有 的話只執行乙...

推導式 生成器

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

python生成器推導式

1.生成器推導式是繼列表推導式後的有一中python推導式,他比列表推導式速度更快,占用的記憶體也更少。2.使用生成器物件時,可以根據需要將他轉化為列表或者元組,也可以是喲個生成器對像 next 方法或內建函式next 進行遍歷,其具有惰性求值的特點,進行一次遍歷後便不能再次方位內部元素,即訪問一次...