1. 程式人生 > >tensorflow【With】學習筆記

tensorflow【With】學習筆記

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,並充分考慮了異常情況。對於資源類物件(用完需要儘快釋放)的使用,比如檔案控制代碼、資料庫連線等等,這無疑是一種簡潔而完善的程式碼形式。