python的生成器的應用yield 楊輝三角。

2021-07-27 19:35:17 字數 1892 閱讀 6313

首先很多人一定不明白生成器yield是什麼意思。其實和它最像的就是return。舉個簡單的例子吧。

return:的用法

def fib(n):

a=1b=1

for i in range(0,n+1):

a,b=b,a+b

return a

print fib(10)

列印結果:

1

process finished with exit code 0

看見了嗎,只列印的第乙個就直接返回了。也就是說迴圈才剛開始就直接退出該函式了。

yield:的用法

def fib(n):

a=1b=1

for i in range(0,n+1):

a,b=b,a+b

yield a

for i in fib(10):

print i

列印結果:

123

581321

3455

89144

process finished with exit code 0

通過乙個迴圈將fib的值返回值,反覆列印。該函式每次產生乙個值,函式就會被凍結,函式停在原地等待被重新被喚醒。函式被喚醒後就從定製的那點開始執行。(通過迭代來使用所有的值)

遞迴生成器。

def flatten(list):

try:

for i in list:

for j in flatten(i):

yield j

except typeerror:

yield list

print list(flatten([[1,[2,3],[[4,5],6]],7,8,[9,10]]))

列印結果:

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

process finished with exit code 0

分析一下:

[1,[2,3],[[4,5],6]] 被變數 i 讀取,而第二重迴圈導致 j 讀取 剛那個列表裡的第乙個元素 1。1不是列表,引發型別錯誤。因為乙個數字是不能被for 迴圈的。所以引發typeerror異常。此時的list是 那個 1.  則第乙個元素 1 被迭代出來。

yield還是很好用的。比如輸出乙個楊輝三角。

楊輝三角長什麼樣子呢?

他有乙個規律,每一行的 0+該行 加 該行+0 等於下一行的半邊。

舉個例子。第四行 1331 。01331 + 13310 = 14641 也就是下一行。

last 是上個列表的最後一行。

[sum(_) for _ in zip([0]+last,last+[0])]     # 這就是上面的實現。

最後的生成結果。

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

python中生成器的應用

生成器的應用 實現多工 import time def task 1 while true print 1 time.sleep 0.1 yield def task 2 while true print 2 time.sleep 0.1 yield task 1 task 2 def main t...

python 生成器作用 Python生成器

生成器介紹 在函式內部包含yield關鍵字,那麼該函式執行的結果是生成器,生成器就是迭代器。生成器的功能 把函式結果做成迭代器 以一種優雅的方式封裝好iter,next 提供了一種自己定義迭代器的方式。使用生成器建立乙個迭代器 def a print a yield 11 使用yield,執行後返回...

python生成器好處 Python生成器筆記

python中三大器有迭代器,生成器,裝飾器,本文主要講述生成器。主要從生成器的概念,本質,以及yield關鍵字的使用執行過程。本質 生成器是一類特殊的迭代器,使用了yield關鍵字的函式不再是函式,而是生成器。使用了yield的函式就是生成器 1.yield關鍵字有兩點作用 1.1 yield語句...