網站首頁 編程語言 正文
一、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
相關推薦
- 2022-10-20 Python?BautifulSoup?節點信息_python
- 2023-07-08 el-table-column重構expand的樣式
- 2022-11-14 Python實現簡易超市管理系統_python
- 2022-11-14 C++資源管理操作方法詳解_C 語言
- 2022-11-10 詳解?PyTorch?Lightning模型部署到生產服務中_python
- 2022-04-09 Spring Boot 配置CROS Filter
- 2023-03-21 Mongodb?用戶權限管理及配置詳解_MongoDB
- 2022-09-21 Python實現斐波那契數列的多種寫法總結_python
- 最近更新
-
- 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同步修改后的遠程分支