欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python?yield迭代器詳解

 更新時(shí)間:2022年11月07日 10:35:38   作者:一休Q_Q  
帶有yield的函數(shù)在Python中被稱之為generator(生成器),也就是說,當(dāng)你調(diào)用這個(gè)函數(shù)的時(shí)候,函數(shù)內(nèi)部的代碼并不立即執(zhí)行?,這個(gè)函數(shù)只是返回一個(gè)生成器

一、yield迭代器

在python深度學(xué)習(xí)模型讀取數(shù)據(jù)時(shí),經(jīng)常遇到y(tǒng)ield,互聯(lián)網(wǎng)搜索后,將比較容易理解的說明記錄一下。

二、使用步驟

1.引入庫

代碼如下(示例):

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

2.讀入數(shù)據(jù)

代碼如下(示例):

p_batch = batch(p_batch, self.batch_size)

總結(jié)

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

這兩者的區(qū)別是:

有return的函數(shù)直接返回所有結(jié)果,程序終止不再運(yùn)行,并銷毀局部變量;

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

而有yield的函數(shù)則返回一個(gè)可迭代的 generator(生成器)對(duì)象,你可以使用for循環(huán)或者調(diào)用next()方法遍歷生成器對(duì)象來提取結(jié)果。

什么是生成器呢?在 Python 中,使用了yield的函數(shù)被稱為生成器。有點(diǎn)套娃的感覺,但事實(shí)就是這樣,調(diào)用一個(gè)yield函數(shù),就會(huì)返回一個(gè)生成器對(duì)象。

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

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

舉個(gè)例子

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

#輸出結(jié)果為:
1
2
3

也可以調(diào)用next方法:

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

可以看到,test函數(shù)返回一個(gè)生成器,調(diào)用next()方法后,函數(shù)開始運(yùn)行,遇到第一個(gè)yield關(guān)鍵字,返回生成的值(1),程序暫停;

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

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

帶yield的函數(shù)是一個(gè)生成器,這個(gè)生成器有一個(gè)方法就是next,next就相當(dāng)于“下一步”生成哪個(gè)數(shù),這一次的next開始的地方是接著上一次的next停止的地方執(zhí)行的。

所以調(diào)用next的時(shí)候,生成器并不會(huì)從函數(shù)的開始執(zhí)行,只是接著上一步停止的地方開始,然后遇到y(tǒng)ield后,return出要生成的數(shù),此步就結(jié)束。

到此這篇關(guān)于python yield迭代器詳解的文章就介紹到這了,更多相關(guān)python yield 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • cmd輸入python命令無反應(yīng)的解決方案

    cmd輸入python命令無反應(yīng)的解決方案

    這篇文章主要介紹了cmd輸入python命令無反應(yīng)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • 在Python中如何傳遞任意數(shù)量的實(shí)參的示例代碼

    在Python中如何傳遞任意數(shù)量的實(shí)參的示例代碼

    這篇文章主要介紹了在Python中如何傳遞任意數(shù)量的實(shí)參的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • python中import,from……import的使用詳解

    python中import,from……import的使用詳解

    這篇文章主要介紹了python中import,from……import的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • PyTorch?Autograd的核心原理和功能深入探究

    PyTorch?Autograd的核心原理和功能深入探究

    本文深入探討了PyTorch中Autograd的核心原理和功能,從基本概念、Tensor與Autograd的交互,到計(jì)算圖的構(gòu)建和管理,再到反向傳播和梯度計(jì)算的細(xì)節(jié),最后涵蓋了Autograd的高級(jí)特性
    2024-01-01
  • Python隨機(jī)生成帶特殊字符的密碼

    Python隨機(jī)生成帶特殊字符的密碼

    這篇文章主要介紹了Python隨機(jī)生成帶特殊字符的密碼的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • 利用 Python ElementTree 生成 xml的實(shí)例

    利用 Python ElementTree 生成 xml的實(shí)例

    這篇文章主要介紹了利用 Python ElementTree 生成 xml的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • opencv-python基本圖像處理詳解

    opencv-python基本圖像處理詳解

    這篇文章主要介紹了Python Opencv圖像處理基本操作代碼詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-08-08
  • python 動(dòng)態(tài)獲取當(dāng)前運(yùn)行的類名和函數(shù)名的方法

    python 動(dòng)態(tài)獲取當(dāng)前運(yùn)行的類名和函數(shù)名的方法

    這篇文章主要介紹了python 動(dòng)態(tài)獲取當(dāng)前運(yùn)行的類名和函數(shù)名的方法,分別介紹使用內(nèi)置方法、sys模塊、修飾器、inspect模塊等方法,需要的朋友可以參考下
    2014-04-04
  • Python中多線程的創(chuàng)建及基本調(diào)用方法

    Python中多線程的創(chuàng)建及基本調(diào)用方法

    由于注明的GIL的存在,Python盡管能創(chuàng)建多個(gè)線程,但是多線程卻不能同時(shí)工作...well,這里我們來看一下Python中多線程的創(chuàng)建及基本調(diào)用方法
    2016-07-07
  • 跟老齊學(xué)Python之用Python計(jì)算

    跟老齊學(xué)Python之用Python計(jì)算

    做為零基礎(chǔ)學(xué)習(xí)Python,也就從計(jì)算小學(xué)數(shù)學(xué)題目開始吧。因?yàn)閺倪@里開始,數(shù)學(xué)的基礎(chǔ)知識(shí)列為肯定過關(guān)了。
    2014-09-09

最新評(píng)論