python中with的用法,上下文管理器
一、上下文管理器
含有__enter__和__exit__方法的對(duì)象就是上下文管理器
class Foo(object):def __init__(self):print('實(shí)例化一個(gè)對(duì)象')def __enter__(self):print('進(jìn)入')def __exit__(self, exc_type, exc_val, exc_tb):print('退出')# return Trueobj = Foo()with obj:print('正在執(zhí)行')執(zhí)行結(jié)果:
實(shí)例化一個(gè)對(duì)象 進(jìn)入 正在執(zhí)行 退出因?yàn)槲覀冊(cè)诙xFoo時(shí),定義了__enter__和__exit__方法,那么我們實(shí)例化的對(duì)象obj就是一個(gè)上下文管理器,
二、with 上下文管理器:
with 上下文管理器:語句體當(dāng)with遇到上下文管理器,就會(huì)在執(zhí)行語句體之前,先執(zhí)行上下文管理器的__enter__方法,然后再執(zhí)行語句體,執(zhí)行完語句體后(無論語句體是否報(bào)錯(cuò)),最后執(zhí)行上下文管理器的__exit__方法
語句體出現(xiàn)異常時(shí),如果 exit 返回 False(默認(rèn)不寫返回值時(shí),即為False),則會(huì)重新拋出異常,讓with 之外的語句邏輯來處理異常,這也是通用做法;如果返回 True,則忽略異常,不再對(duì)異常進(jìn)行處理
三、with 上下文管理器 as target:
with 上下文管理器 as target:代碼語句體with后面必須跟一個(gè)上下文管理器,如果使用了as,則是把上下文管理器的 enter() 方法的返回值賦值給 target,target 可以是單個(gè)變量,或者由“()”括起來的元組(不能是僅僅由“,”分隔的變量列表,必須加“()”)
**結(jié)論:**使用了 with 語句,不管在處理文件過程中是否發(fā)生異常,都能保證 with 語句執(zhí)行完畢后已經(jīng)關(guān)閉了打開的文件句柄
總結(jié)
以上是生活随笔為你收集整理的python中with的用法,上下文管理器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: reduce_sum()中的reduct
- 下一篇: tf.control_dependenc