python上下文管理器及with語句的使用

2021-09-21 20:50:32 字數 2158 閱讀 5883

上下文管理器就是實現了上下文協議的類

上下文協議就是乙個類要實現__enter__()和__exit__()兩個方法

python提供了with語句語法,來構建對資源建立與釋放的語法糖

優秀實踐:

class

database

(object):

...def __enter__

(self):

self

.connect()

returnself

def __exit__

(self

,exc_type

,exc_val

,exc_tb):

self

.close()

def handle_query():

with database

()asdb:

result = db.

query()

with語句的基本語法結構如下:

with expression [as variable]:

with-block

with語句的expression是上下文管理器

variable是上下文管理器expression呼叫__enter__()函式返回的物件

with-block是執行語句,with-block執行完畢時,

with語句會自動進行資源清理,

下面例子with語句會自動關閉檔案 呼叫

__exit__()

方法時,如果是with語句體造成的異常退出,那異常型別、異常值、異常追蹤資訊將被傳給__exit__(),

如果在exit函式最後執行return true:那麼異常就不會向外丟擲,

預設返回false,向外丟擲異常資訊,程式退出

例項:class ******obj:

def __enter__(self):  # 獲取資源

print("enter")

def __exit__(self, exc_type, exc_val, exc_tb):  # 釋放資源

print("exit")

return true

def said(self):

print("said")

with ******obj() as p:

p.said()

執行結果:

def __enter__(self):  # 獲取資源

print("enter")

def __exit__(self, exc_type, exc_val, exc_tb):  # 釋放資源

print("exit")

return false

def said(self):

print("said")

with ******obj() as p:

p.said()

執行結果:

如常用的開啟檔案方式:

f = open(

"test.txt")

try:

forline

inf.readlines():

print

(line)

finally:

f.close()

等價於以下**

with open(

"text.txt"

) as f:

forline

inf.readlines()

print(line)

上下文管理器open("te

xt.txt")的__enter__()函式返回乙個檔案物件

with語句會自動進行資源清理,自動關閉檔案

python 上下文管理器

上下文管理器允許你在有需要的時候,精確地分配和釋放資源。使用上下文管理器最廣泛的案例就是with語句了。想象下你有兩個需要結對執行的相關操作,然後還要在它們中間放置一段 上下文管理器就是專門讓你做這種事情的。舉個例子 with open some file w as opened file open...

python上下文管理器

上下文管理器是乙個包裝任意 塊的物件。上下文管理器保證進入上下文管理器時,每次 執行的一致性 當退出上下文管理器時,相關資源會被正確 這裡被正確 指的是在 exit 方法自定義 比如關閉資料庫游標 值得注意的是,上下文管理器一定能夠保證退出步驟的執行。如果進入上下文管理器,根據定義,一定會有退出步驟...

Python 上下文管理器

python中的上下文管理器是乙個包裝任意 塊的物件。它在處理資源的開啟關閉 異常的處理等方面有很好的實現方法。1.上下文管理器的語法 假設我們需要讀取乙個檔案中的資料,如下 try test file open test.txt r contents test file.read finally ...