[問題] yield跟return

看板Python作者 (shiyeh)時間2年前 (2022/03/15 22:58), 編輯推噓8(804)
留言12則, 6人參與, 2年前最新討論串1/1
最近看fastapi常常看到類似這段code def get_db(): db = SessionLocal() try: yield db finally: db.close() 想請問為什麼db 是yield出來,而不是用return就好啊? 跟使用情境有關嗎? 之前也有在for迴圈之類的 看過這個用法 用yield的用意是什麼呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.167.217.119 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1647356283.A.CF3.html

03/15 23:15, 2年前 , 1F
這邊用return的話db.close()會在return 之前執行
03/15 23:15, 1F

03/15 23:16, 2年前 , 2F
yield只是暫時跳出function回傳,之後還會跳回來執行
03/15 23:16, 2F

03/15 23:16, 2年前 , 3F
db.close()
03/15 23:16, 3F

03/16 09:02, 2年前 , 4F
我也很好奇 fastapi 什麼時候會進finally: db.close
03/16 09:02, 4F

03/16 09:56, 2年前 , 5F
get_db StopIteration 或是被del 都會執行finally
03/16 09:56, 5F

03/16 09:58, 2年前 , 6F
有點類似另類的context manager 覺得酷可以學起來w
03/16 09:58, 6F

03/16 10:48, 2年前 , 7F
with的一種語法糖
03/16 10:48, 7F

03/16 12:51, 2年前 , 8F
我覺得fastapi 的 Depends 也是蠻神奇的 也是不知道怎麼進
03/16 12:51, 8F

03/17 17:48, 2年前 , 9F
這個之前有用到 但後來用忘記用法 只知道跟return很像
03/17 17:48, 9F

03/18 22:21, 2年前 , 10F

03/19 15:16, 2年前 , 11F

03/19 15:16, 2年前 , 12F
可能幫助
03/19 15:16, 12F
文章代碼(AID): #1YCAbxpp (Python)