国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

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

2019-11-06 07:55:45
字體:
來源:轉載
供稿:網友

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

return:的用法

def fib(n):    a=1    b=1    for i in range(0,n+1):        a,b=b,a+b        return aPRint fib(10)

打印結果:

1Process finished with exit code 0

看見了嗎,只打印的第一個就直接返回了。也就是說循環才剛開始就直接退出該函數了。

yield:的用法

def fib(n):    a=1    b=1    for i in range(0,n+1):        a,b=b,a+b        yield afor i in fib(10):    print i

打印結果:

123581321345589144Process finished with exit code 0通過一個循環將fib的值返回值,反復打印。該函數每次產生一個值,函數就會被凍結,函數停在原地等待被重新被喚醒。函數被喚醒后就從定制的那點開始執行。(通過迭代來使用所有的值)

遞歸生成器。

def flatten(list):    try:        for i in list:            for j in flatten(i):                yield j    except TypeError:        yield listprint 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]


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 上虞市| 泸定县| 晋宁县| 上高县| 嘉荫县| 天等县| 纳雍县| 灵石县| 安宁市| 北碚区| 甘肃省| 丹寨县| 庆城县| 双流县| 甘泉县| 穆棱市| 闸北区| 高安市| 宜昌市| 大悟县| 嵊泗县| 新干县| 凉城县| 邢台县| 姚安县| 自贡市| 绩溪县| 五家渠市| 甘孜县| 水城县| 曲靖市| 宕昌县| 札达县| 东丽区| 霸州市| 哈尔滨市| 卢龙县| 巫山县| 宝坻区| 荣成市| 皮山县|