python之with ... as ... 語句

基礎知識:

上下文管理協議(Context Management Protocol):包含方法 __enter__() 和 __exit__(),支持

該協議的對象要實現這兩個方法。

上下文管理器(Context Manager):支持上下文管理協議的對象,這種對象實現了

__enter__() 和 __exit__() 方法。上下文管理器定義執行 with 語句時要建立的運行時上下文,

負責執行 with 語句塊上下文中的進入與退出操作。通常使用 with 語句調用上下文管理器,

也可以通過直接調用其方法來使用。

運行時上下文(runtime context):由上下文管理器創建,通過上下文管理器的 __enter__() 和

__exit__() 方法實現,__enter__() 方法在語句體執行之前進入運行時上下文,__exit__() 在

語句體執行完後從運行時上下文退出。with 語句支持運行時上下文這一概念。

上下文表達式(Context Expression):with 語句中跟在關鍵字 with 之後的表達式,該表達式

要返回一個上下文管理器對象。

語句體(with-body):with 語句包裹起來的代碼塊,在執行語句體之前會調用上下文管

理器的 __enter__() 方法,執行完語句體之後會執行 __exit__() 方法。

with context_expression [as target(s)]:
    with-body

執行順序:這裏 context_expression 要返回一個上下文管理器對象,該對象並不賦值給 as 子句中的 target(s) ,如果指定了 as 子句的話,會將上下文管理器的 __enter__() 方法的返回值賦值給 target(s)。target(s) 可以是單個變量,或者由“()”括起來的元組(不能是僅僅由“,”分隔的變量列表,必須加“()”)。

因此創建可以使用with語句的對象只需要實現 __enter__()和 __exit__()函數


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章