作者shiyeh (shiyeh)
看板Python
标题[问题] yield跟return
时间Tue Mar 15 22:58:00 2022
最近看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://webptt.com/cn.aspx?n=bbs/Python/M.1647356283.A.CF3.html
1F:推 lycantrope: 这边用return的话db.close()会在return 之前执行 03/15 23:15
2F:→ lycantrope: yield只是暂时跳出function回传,之後还会跳回来执行 03/15 23:16
3F:→ lycantrope: db.close() 03/15 23:16
4F:推 TuCH: 我也很好奇 fastapi 什麽时候会进finally: db.close 03/16 09:02
5F:推 lycantrope: get_db StopIteration 或是被del 都会执行finally 03/16 09:56
6F:→ lycantrope: 有点类似另类的context manager 觉得酷可以学起来w 03/16 09:58
7F:推 poototo: with的一种语法糖 03/16 10:48
8F:推 TuCH: 我觉得fastapi 的 Depends 也是蛮神奇的 也是不知道怎麽进 03/16 12:51
9F:推 hanfadacai: 这个之前有用到 但後来用忘记用法 只知道跟return很像 03/17 17:48
12F:→ single4565: 可能帮助 03/19 15:16
13F:→ mantour: try: ... finally: ... 才是比较基本的写法吧? with 应 03/23 00:47
14F:→ mantour: 该是後来才加进去的语法(PEP 343) 03/23 00:47