網站首頁 編程語言 正文
一、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
相關推薦
- 2023-06-21 Android崩潰日志收集和保存解析_Android
- 2022-08-27 .Net實現延遲隊列_實用技巧
- 2023-01-23 oracle數據排序后獲取前幾行數據的寫法(rownum、fetch方式)_oracle
- 2022-12-09 C++中使用cout以hex格式輸出方式_C 語言
- 2022-07-27 Golang的strings.Split()踩坑記錄_Golang
- 2023-04-06 C/C++程序鏈接與反匯編工具objdump的使用介紹_C 語言
- 2022-06-14 Golang監聽日志文件并發送到kafka中_Golang
- 2022-09-23 深入了解C++的多態與虛函數_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支