Python探險 生成器yield剖析

2021-08-08 18:25:26 字數 1231 閱讀 8822

日期:20170926

本次執行環境python3

我們先來看一下**,

#!/usr/bin/python3

defmygenerator

():yield

1yield

2yield

3return

"done"

print(mygenerator)

print()

num=mygenerator()

print(num)

print(next(num))

print(next(num))

print(next(num))

執行,

[penx@ali01 python2]$ ./example_generator.py 

mygenerator at 0x7f297bff99d8>

mygenerator at 0x7f297bf57708>12

3[penx@ali01 python2]$

執行過程,

先print出mygenerator的資訊,可以看出它只是乙個函式。

再呼叫mygenerator,返回給num。雖然mygenerator是函式,但這裡並沒有執行。好戲在後頭。

我print出num的資訊,卻是乙個「generator object」。呼叫乙個函式不但沒有執行,反而返回了乙個物件,generator object。物件通常可以理解為例項。

很奇怪,對吧?python把生成器的資訊標誌為函式(function),但呼叫時卻生成乙個例項。有可能python把函式解析封裝成乙個生成器。

用next(num)開始執行生成器函式,執行到yield 1時,返回並返回n。

再next,就會再次進入生成器函式,但並不是重頭執行,而是上一次的yield 1後。遇到yield 2,再次返回。

再next,情況類似。

如果再加乙個next,就會報stopiteration。

其實yield並不神秘,其實就是我們學習作業系統時,任務掛起的知識點。

函式通過yield自己掛起,然後我們可以用next來喚醒它。

因為yield掛起時,會儲存執行環境,所以next就可以知道函式執行到哪一步。

python 生成器作用 Python生成器

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

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

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

python生成器函式 Python 生成器函式

一 生成器 生成器指的是生成器物件,可由生成器表示式得到,也可使用 yield 關鍵字得到乙個生成器函式,呼叫這個函式得到乙個生成器物件 生成器物件,是乙個可迭代物件,是乙個迭代器 生成器物件,是延遲計算 惰性求值的 1.1 生成器函式 函式體重包含 yield 語句的函式,就是生成器函式,呼叫後返...