最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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(生成器)對象,你可以使用for循環(huán)或者調(diào)用next()方法遍歷生成器對象來提取結(jié)果。

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

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

在調(diào)用生成器函數(shù)的過程中,每次遇到 yield 時(shí)函數(shù)會暫停并保存當(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í)候,生成器并不會從函數(shù)的開始執(zhí)行,只是接著上一步停止的地方開始,然后遇到y(tǒng)ield后,return出要生成的數(shù),此步就結(jié)束。

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

相關(guān)文章

  • 淺談Pandas中map, applymap and apply的區(qū)別

    淺談Pandas中map, applymap and apply的區(qū)別

    下面小編就為大家分享一篇淺談Pandas中map, applymap and apply的區(qū)別,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • python2.7的編碼問題與解決方法

    python2.7的編碼問題與解決方法

    這篇文章主要介紹了在python2.7中遇到的編碼問題與解決方法,文章介紹了直接在python文件內(nèi)修改系統(tǒng)編碼和在輸入輸出的時(shí)候,修改編碼格式的方法,有需要的朋友們可以參考借鑒。
    2016-10-10
  • 利用Python開發(fā)一個(gè)功能全面的Markdown編輯工具

    利用Python開發(fā)一個(gè)功能全面的Markdown編輯工具

    這篇文章主要為大家詳細(xì)介紹了如何利用Python開發(fā)一個(gè)功能全面的Markdown編輯工具,支持Markdown內(nèi)容的編輯,HTML預(yù)覽等功能,需要的可以參考下
    2025-03-03
  • Python獲取Windows桌面路徑的三種方法

    Python獲取Windows桌面路徑的三種方法

    在日常編程工作中,有時(shí)我們需要將文件或數(shù)據(jù)自動保存到用戶的桌面上以便于快速訪問,在 Windows 操作系統(tǒng)中,可以通過多種方式來獲取桌面路徑,本文將詳細(xì)介紹三種常用的方法,需要的朋友可以參考下
    2024-12-12
  • Python基礎(chǔ)中的列表你了解嗎

    Python基礎(chǔ)中的列表你了解嗎

    這篇文章主要為大家介紹了Python基礎(chǔ)中的列表列表,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • Python中的getter和setter的方法使用詳解

    Python中的getter和setter的方法使用詳解

    基本上,在面向?qū)ο缶幊陶Z言中,使用setter和getter方法的主要目的是為了確保數(shù)據(jù)的封裝,這篇文章主要介紹了Python的getter和setter的方法使用詳解,需要的朋友可以參考下
    2022-12-12
  • Flask-SocketIO服務(wù)端安裝及使用代碼示例

    Flask-SocketIO服務(wù)端安裝及使用代碼示例

    這篇文章主要介紹了Flask-SocketIO服務(wù)端安裝及使用代碼示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • matplotlib繪制符合論文要求的圖片實(shí)例(必看篇)

    matplotlib繪制符合論文要求的圖片實(shí)例(必看篇)

    下面小編就為大家?guī)硪黄猰atplotlib繪制符合論文要求的圖片實(shí)例(必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-06-06
  • python:socket傳輸大文件示例

    python:socket傳輸大文件示例

    本篇文章主要介紹了python:socket傳輸大文件示例,具有一定的參考價(jià)值,有興趣的可以了解一下,
    2017-01-01
  • Pandas之StyleFrame如何設(shè)置表格樣式

    Pandas之StyleFrame如何設(shè)置表格樣式

    這篇文章主要介紹了Pandas之StyleFrame如何設(shè)置表格樣式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07

最新評論

新丰县| 汝城县| 资中县| 家居| 新竹市| 阿瓦提县| 宝坻区| 闽清县| 马公市| 忻州市| 高阳县| 汕尾市| 游戏| 彩票| 黑水县| 城口县| 竹溪县| 包头市| 浙江省| 易门县| 武穴市| 桂林市| 潼关县| 凌海市| 潍坊市| 商河县| 阿拉善右旗| 巴南区| 兰考县| 安庆市| 杭锦旗| 江城| 沁源县| 伊吾县| 旅游| 永寿县| 和平县| 南开区| 大理市| 广安市| 凤台县|