上下文管理器
一、基本語法
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 函式的返回值呢?其實並不是,這裡涉及到上下文管理器方面的知識,先來解釋一下什麼是上下文管...