python之上下文管理器 with語句詳解

2021-10-02 03:11:02 字數 1834 閱讀 6159

上下文管理器

一、基本語法

with expr as var

pass

>>>以最常用的with為例:

操作文字物件的時候,幾乎所有的人都會讓我們要用with open,這就是乙個上下文管理器的一種。比如:

with

open

('1.txt'

)as f:

print

(f.readllines(

))

輸出結果:

'print'

'true'

但是with本身並沒有異常捕獲的功能,如果發生了執行時異常的情況,它照樣可以關閉檔案釋放資源。

另外:

try

:with

open

('1.txt'

)as f2:

print

(f2.read())

f2.seek(-5

,os.seek_set)

except valueerror as e:

print

("error"

)print

(f2.closed)

輸出結果:

'print'

'error'

'true'

二、如何寫上下管理器
class

resource()

def__enter__

(self)

:# 連線資源

print

('==connect to resource=='

)def

__exit__

(self)

:# 關閉資源連線

print

('==close resource connection=='

)def

operate

(self)

:# 執行中

print

('==in operation=='

)if __name__ ==

'__main__'

:with resource(

)as res:

res.operate(

)

1

.'==connect to resource=='2.

'==in operation=='3.

'==close resource connection=='

從這個示例可以很明顯的看出,在編寫**時,可以將資源的連線或者獲取放在__enter__中,而將資源的關閉寫在__exit__中。

三、為什麼要用資源管理器

class

resource()

def__enter__

(self)

:# 連線資源

print

('==connect to resource=='

)def

__exit__

(self)

:# 關閉資源連線

print

('==close resource connection=='

)def

operate

(self)

:# 執行中1/

0with resource(

)as res:

res.operate(

)

當主程式**沒有報異常時,這三個引數都將為none。

部分參考:

Python之上下文管理器

以下文章總結自 head first python 讀書筆記 從python處理乙個檔案說起,在python中開啟乙個檔案時,一般的 邏輯如下 file open test.txt for line in file print line file.close 以上 主要做了3件事 1 開啟乙個檔案 ...

python 之 上下文管理器

首先說一下什麼叫上下文管理器 在python中任何實現了 enter 和 exit 方法的物件都可稱之為上下文管理器,上下文管理器物件可以使用 with 關鍵字 我們可以模擬實現乙個類,讓該類實現 enter 和 exit 方法 class file def init self,filename,m...

Python之上下文管理器物件

在學習python的過程中,經常會用到with語句,比如在進行檔案操作時,會使用下面這樣的語法 with open 1.txt r as f print f.read 這裡就會產生乙個疑問 f是不是就是open 函式的返回值呢?其實並不是,這裡涉及到上下文管理器方面的知識,先來解釋一下什麼是上下文管...