Python生成器和列表生成式

2021-08-20 16:21:55 字數 1760 閱讀 4742

生成器:

在python中, 這種一邊迴圈一邊計算的機制, 稱為生成器:generator

列表生成式:l(list) = [x * x for x in range(10)]

生成器:    g(generator) = (x * x for x in range(10))

呼叫該generator時, 首先要生成乙個generator物件, 然後用 next() 函式不斷獲得下乙個返回值

斐波拉契數列函式:

def fib(max):

n, a, b = 0, 0, 1

while n < max:

print(b)

a , b = b, a + b

n = n + 1

return 'done'

斐波拉契數列generator:

def fib(max):

n, a, b = 0, 0, 1

while n < max:

yield b

a, b = b, a + b

n = n + 1

return 'done'

就是定義

generator的另

一種方法。 如果乙個函式定

義中包含

yield 關鍵

字, 那麼

這個函式就不再是乙個普通函式, 而是乙個

generator。這

裡, 最

難理解的就是

generator

和函式的

執行流程不一

樣。 函式是順序

執行, 遇到

return

語句或者最後一行函式

語句就返回。 而變成

generator

的函式, 在每次呼叫

next() 的時

候執行, 遇到

yield

語句返回, 再次執行

時從上次返回的

yield 語句

處繼續執

行。楊輝三角函式:

def ********s():

n = 1

n = [1]

while true:

print(n)

n = [n[i-1] + n[i] for i in range(len(n))]

n = n + 1

if n >10:

break

結果:

>>>>********s()

[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]

楊輝三角generator函式:

def ********s():  

p = [1]

while true:

yield p

p = [1] + [p[i] + p[i+1] for i in range(len(p)-1)] + [1]

列表生成式和生成器生成式

列表生成式 也就是用一對中括號括起來將生成列表的語句放入括號內來生成乙個列表。例如我想建立乙個100個雞蛋的列表 在其中還可以加判斷條件 下面這個例題可以將列表生成式和正常的for迴圈語句建立列表進行鮮明的對比 for迴圈寫法 經過上面的對比我們發現,其優點就是語法簡潔。生成器生成式 生成器生成式的...

列表生成式,列表生成器

coding utf 8 列表生成式是快速生成乙個列表一些公式 numbers for x in range 0,101 print numbers 要放入列表資料 簡單的表示式 1 表示式 2 x for x in range 0,101 for 迴圈遍歷出來的值,放入列表中 numbers x ...

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

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