日期: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 語句的函式,就是生成器函式,呼叫後返...