python yield

yield

如果不使用 yield,一般會這么寫.
然后使用 這個列表的時候,還需要再迭代一遍。
這樣效率又低,又占用了內(nèi)存。

def find_even():
    for i in range(10):
        if i % 2 == 0:
            yield i


def find_even2():
        result = []
    for i in range(10):
        if i % 2 == 0:
            result.append(i)
    return result


if __name__ == '__main__':
    for i in find_even2():
        print(i)

另外,yield 一個很神奇的地方是,生成器執(zhí)行的時候,遇到 yield 會掛起像 return 一樣返回值(這點是和 return 類似的地方),但是當再次執(zhí)行的執(zhí)行的時候會接著當時掛起的地方,繼續(xù)往下執(zhí)行。(這點是和 return 不同的地方)

如果真的理解了,可以想想下面這個 print 會執(zhí)行幾次,然后 debug 看一下。

def search2(lines, pattern, history=5):
    history_lines = deque(maxlen=history)
    for line in lines:
        if pattern in line:
            yield line, history_lines
        history_lines.append(line)
        print(f"只是掛起,還是會執(zhí)行的 {line}")


if __name__ == '__main__':
    with open(r"E:\package\package\request_rds\note\test_history.py") as f:
        for i in search2(f, "a"):
            print(i)
    
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 從例 1.1 可以看到,func和gen都是函數(shù), 但前者返回數(shù)字 1,后者返回的是個生成器(generator)...
    樊海鵬閱讀 281評論 0 0
  • 對 Python 中的 Yield 一直理解的不夠深刻,甚至存在誤解。遇到一個神奇的用法后(多個 yield 連續(xù)...
    宇智波鼬Zero閱讀 10,983評論 6 1
  • yield的英文單詞意思是生產(chǎn),剛接觸Python的時候感到非常困惑,一直沒弄明白yield的用法。一直到稀里糊涂...
    世外大帝閱讀 32,730評論 6 22
  • 當函數(shù)中包含yield時,函數(shù)被調(diào)用后并沒有執(zhí)行,可以通過next()語句讓它執(zhí)行,直到遇到y(tǒng)ield表達式處。如...
    sum3mer閱讀 358評論 0 0
  • 從大暑到立秋,廣州依然一如既往的熱 烈日當空,熱浪滾滾,即便什么都不做,全身毛孔依然不停的滲汗 想起前段時間,暴日...
    金雋菲閱讀 429評論 1 1

友情鏈接更多精彩內(nèi)容