日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

python?yield迭代器詳解_python

作者:一休Q_Q ? 更新時間: 2022-12-07 編程語言

一、yield迭代器

在python深度學習模型讀取數據時,經常遇到yield,互聯網搜索后,將比較容易理解的說明記錄一下。

二、使用步驟

1.引入庫

代碼如下(示例):

def batch(data, batch_size):
	for ex in data:
		yield ex

2.讀入數據

代碼如下(示例):

p_batch = batch(p_batch, self.batch_size)

總結

如果不太好理解yield,可以先把yield當作return的同胞兄弟來看,他們都在函數中使用,并履行著返回某種結果的職責。

這兩者的區別是:

有return的函數直接返回所有結果,程序終止不再運行,并銷毀局部變量;

def batch(data, batch_size):
	for ex in data:
		return ex

而有yield的函數則返回一個可迭代的 generator(生成器)對象,你可以使用for循環或者調用next()方法遍歷生成器對象來提取結果。

什么是生成器呢?在 Python 中,使用了yield的函數被稱為生成器。有點套娃的感覺,但事實就是這樣,調用一個yield函數,就會返回一個生成器對象。

def test:
	x=1
	y=10
	while x<y:
		yield x
		x+=1
t = test()

在調用生成器函數的過程中,每次遇到 yield 時函數會暫停并保存當前所有的運行信息(保留局部變量),返回yield的值, 并在下一次執行next()方法時從當前位置繼續運行,直到生成器被全部遍歷完。

舉個例子

def test:
	x=1
	yield x
	yield x+1
	yield x+2
t = test()
for tmp in t:
	print(tmp)

#輸出結果為:
1
2
3

也可以調用next方法:

next(t)
#輸出:
1
next(t)
#輸出:
2
next(t)
#輸出:
3

可以看到,test函數返回一個生成器,調用next()方法后,函數開始運行,遇到第一個yield關鍵字,返回生成的值(1),程序暫停;

第二次調用next()方法,代碼從上次暫停的位置開始執行,并遇到了第二個yield關鍵字,再返回生成的值(2),程序暫停;

第三次調用也是如此,返回生成的值(3),生成器耗盡,程序終止;

帶yield的函數是一個生成器,這個生成器有一個方法就是next,next就相當于“下一步”生成哪個數,這一次的next開始的地方是接著上一次的next停止的地方執行的。

所以調用next的時候,生成器并不會從函數的開始執行,只是接著上一步停止的地方開始,然后遇到yield后,return出要生成的數,此步就結束。

原文鏈接:https://blog.csdn.net/eli00001/article/details/127666778

欄目分類
最近更新