最近因為看見公司一位大神將yield用的出神入化,極為讚嘆,遂研究了一下他的**,總結出以下yield使用方法,希望大家加以指正。
都知道yield是python生成器,他可以將資料乙個乙個的「生」出來而不是將所有資料儲存到記憶體中,從而造成大量記憶體的占用,這個是yield使用最常見的一種方式,這種方式大概是使用for迴圈中巢狀yield語句來實現的。
如下:
for i in range(x):
# do something in there
yield i
yield還有一種使用方式就是非同步,主要的應用有tornado中的@coroutine 如果想要進行非同步之間的通訊,就可以使用generation.send() 來進行交流
def
yield_test
(): page = 1
while
1: try:
# something else
last_space = yield page
print last_space
except stopiteration:
break
last_space = none
generator = yield_test()
current_page = generator.send(last_space)
print current_page
last_space = 1
for i in range(x):
current_page = generator.send(last_space)
print current_page
current_space += 1
生成器在建立的時候,首先在建立生成器的時候,生成器中的**並不執行,在send()方法執行之後才開始執行,並且這時執行完yield就停止了,就是將生成器中的值傳給外邊,然後生成器內部就處於停止狀態,等待外邊再次傳入值。(注意,第一次傳入的none並沒有將資料賦值)第二次send的值才首次賦值,並且迴圈一次,將值yield出來之後生成器內部停止。
暫時就這樣,想到什麼再補充
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 語句的函式,就是生成器函式,呼叫後返...