上下文管理器 with
語句可以自動地分配和釋放資源。
讀寫文件
這篇文章中介紹了文件讀寫的方法,每次讀取文件時要使用 open()
函數(shù)打開文件,使用結(jié)束后要用 close()
函數(shù)關(guān)閉文件。有時,我們會忘記關(guān)閉文件,或者打開了許多文件占用太多資源。使用上下文管理器 with
語句可以方便地讀取文件,它會自動地釋放文件。
with open('test.txt') as f:
f.read()
with
語句后可進(jìn)行文件操作,它會自動關(guān)閉文件,而不用去調(diào)用 close()
函數(shù)。
基于類的上下文管理器
用類創(chuàng)建上下文管理器,需要包括 __enter__()
方法,返回需要被管理地資源,也要包括 __exit__()
方法,保存一些釋放、清理資源的操作。
class Manager():
def __init__(self):
pass
def __enter__(self):
pass
def __exit__(self, exc_type, exc_val, exc_tb):
pass
__exit__()
方法中的參數(shù)分別表示 exception_type、exception_value 和 traceback,當(dāng)執(zhí)行 with
語句時,如果有異常拋出,異常的信息就會包含在這三個變量中,傳入方法 __exit__()
,這樣就可以在該方法中處理異常了。如果確定異常已經(jīng)被處理了,請在 __exit__()
的最后,加上 return True
這條語句,否則異常仍然會被拋出。
with Manager() as f:
pass
當(dāng)使用 with
語句創(chuàng)建上下文管理器時,首先會調(diào)用 __init__()
函數(shù)創(chuàng)建對象;其次調(diào)用 __enter__()
函數(shù),返回的 Manager
對象賦值給變量 f
,再進(jìn)行 with
下的操作;最后調(diào)用 __exit__()
語句釋放資源。文章來源:http://www.zghlxwxcb.cn/news/detail-408386.html
基于生成器的上下文管理器
@contextmanager
def manager(name, mode):
try:
f = open(name, mode)
yield f
finally:
f.close()
with manager('test.txt', 'w') as f:
pass
這段代碼中 manager
即是一個生成器,with
語句會打開文件,返回文件對象 f
,結(jié)束后關(guān)閉文件。務(wù)必加上裝飾器 @contextmanager
。文章來源地址http://www.zghlxwxcb.cn/news/detail-408386.html
到了這里,關(guān)于python 上下文管理器 with 語句的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!