Python yield 小結(jié)和實(shí)例
一個(gè)帶有 yield 的函數(shù)就是一個(gè) generator,它和普通函數(shù)不同,生成一個(gè) generator 看起來(lái)像函數(shù)調(diào)用,但不會(huì)執(zhí)行任何函數(shù)代碼,直到對(duì)其調(diào)用 next()(在 for 循環(huán)中會(huì)自動(dòng)調(diào)用 next())才開(kāi)始執(zhí)行。雖然執(zhí)行流程仍按函數(shù)的流程執(zhí)行,但每執(zhí)行到一個(gè) yield 語(yǔ)句就會(huì)中斷,并返回一個(gè)迭代值,下次執(zhí)行時(shí)從 yield 的下一個(gè)語(yǔ)句繼續(xù)執(zhí)行??雌饋?lái)就好像一個(gè)函數(shù)在正常執(zhí)行的過(guò)程中被 yield 中斷了數(shù)次,每次中斷都會(huì)通過(guò) yield 返回當(dāng)前的迭代值。
yield 的好處:把一個(gè)函數(shù)改寫(xiě)為一個(gè) generator 就獲得了迭代能力,比起用類的實(shí)例保存狀態(tài)來(lái)計(jì)算下一個(gè) next() 的值,不僅代碼簡(jiǎn)潔,而且執(zhí)行流程異常清晰。
測(cè)試代碼:
#!/usr/bin/env python
#-*- coding:utf8 -*-
def fab(max):
"""斐波那契數(shù)列"""
n, a, b = 0, 0, 1
while n < max:
yield b
a, b = b, a + b
n += 1
def perm(items, n=None):
"""全排列"""
if n is None:
n = len(items)
for i in range(len(items)):
v = items[i:i+1]
if n == 1:
yield v
else:
rest = items[:i] + items[i+1:]
for p in perm(rest, n-1):
yield v + p
if __name__ == '__main__':
for n in fab(5):
print n
print "全排列:123"
for n in perm("123"):
print n
相關(guān)文章
Python函數(shù)參數(shù)類型及排序原理總結(jié)
這篇文章主要介紹了Python函數(shù)參數(shù)類型及排序原理總結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12Django與數(shù)據(jù)庫(kù)交互的實(shí)現(xiàn)
最近在學(xué)習(xí)Django,本文主要介紹了Django與數(shù)據(jù)庫(kù)交互的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06python中的文件打開(kāi)與關(guān)閉操作命令介紹
下面小編就為大家分享一篇python中的文件打開(kāi)與關(guān)閉操作命令介紹,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04Python利用OpenCV和skimage實(shí)現(xiàn)圖像邊緣檢測(cè)
提取圖片的邊緣信息是底層數(shù)字圖像處理的基本任務(wù)之一。本文將通過(guò)OpenCV和skimage的?Canny?算法實(shí)現(xiàn)圖像邊緣檢測(cè),感興趣的可以了解一下2022-12-12Python使用Selenium實(shí)現(xiàn)淘寶搶單的流程分析
這篇文章主要介紹了Python使用Selenium實(shí)現(xiàn)淘寶搶單的流程分析,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06教你pycharm快速添加遠(yuǎn)程環(huán)境的詳細(xì)過(guò)程
今天通過(guò)本文給大家分享pycharm快速添加遠(yuǎn)程環(huán)境的過(guò)程,通過(guò)在setting中選擇設(shè)置符號(hào)add,具體詳細(xì)過(guò)程跟隨小編一起通過(guò)本文學(xué)習(xí)下吧2021-07-07十一個(gè)案例帶你吃透Python函數(shù)參數(shù)
這篇文章主要通過(guò)十一個(gè)案例帶大家一起了解一下Python中的函數(shù)參數(shù),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定幫助,需要的可以參考一下2022-08-08python匹配兩個(gè)短語(yǔ)之間的字符實(shí)例
今天小編就為大家分享一篇python匹配兩個(gè)短語(yǔ)之間的字符實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12