tensorflow【With】學習筆記
阿新 • • 發佈:2019-01-05
tensorflow 學習過程中,經常用到with,值得一說。
With
要搭配上下文管理器(Context Manager)物件使用。
所謂的上下文管理器物件,就是實現了上下文管理器協議(Context Manager Protocol)的物件。協議要求物件定義中必須實現__enter__()
和__exit__()
方法。
當看到下面語句時:
With Context Manager Object [as target]:
Body
它有4個意思:
- With塊會在
Body
開始前自動呼叫Context Manager Object的__enter__()
- With塊會在
Body
結束前自動呼叫Context Manager Object的__exit__()
方法,即使Body
還未執行完時發生了異常,__exit__()
也總會被呼叫; Body
中出現異常時,Context Manager Object的__exit__()
執行如果返回False
,異常繼續向上層丟擲,如果返回True
則該異常被忽略;- 可選的
as target
並非是Context Manager Object本身,而是其呼叫__enter__()
的返回值;
總的來說,With語句幫助上下文管理器物件實現了兩個自動化的操作enter和exit,並充分考慮了異常情況。對於資源類物件(用完需要儘快釋放)的使用,比如檔案控制代碼、資料庫連線等等,這無疑是一種簡潔而完善的程式碼形式。