房地產(chǎn)平面設(shè)計(jì)主要做什么貴州二級(jí)站seo整站優(yōu)化排名
什么是上下文管理器
上下文管理器(Context Manager)是 Python 中用于管理資源分配和釋放的一種機(jī)制。它允許您在進(jìn)入和退出代碼塊時(shí)執(zhí)行特定的操作,例如打開(kāi)和關(guān)閉文件、建立和關(guān)閉數(shù)據(jù)庫(kù)連接、獲取和釋放鎖等。上下文管理器常常與 with 語(yǔ)句一起使用,以確保資源在使用后被正確地釋放。Python中主要通過(guò)兩種方法實(shí)現(xiàn):
使用類(lèi)實(shí)現(xiàn)上下文管理器
要?jiǎng)?chuàng)建一個(gè)使用類(lèi)實(shí)現(xiàn)的上下文管理器,您需要定義一個(gè)類(lèi),該類(lèi)包括 enter 和 exit 方法。enter 方法用于進(jìn)入代碼塊前執(zhí)行的操作,而 exit 方法用于退出代碼塊后執(zhí)行的操作。
class ParseFile:def __init__(self, filename, mode):self.filename = filenameself.mode = modedef __enter__(self):self.file = open(self.filename, self.mode)return self.filedef __exit__(self, exc_type, exc_value, traceback):""":param exc_type: 異常類(lèi)型:param exc_value: 異常值:param traceback: 異常相關(guān)的堆棧跟蹤信息,堆棧跟蹤包括了引發(fā)異常的代碼路徑以及函數(shù)調(diào)用鏈:return:"""self.file.close()# 使用上下文管理器打開(kāi)文件
with ParseFile('data.txt', 'r') as f:print(f.read())
生成器也可以用作上下文管理器
使用@contextmanager 裝飾器標(biāo)記為上下文管理器,yield會(huì)把函數(shù)定位分成兩個(gè)部分:yield前面所有代碼是在with開(kāi)始時(shí)執(zhí)行(類(lèi)似__enter__方法),yield后面的是在with結(jié)束時(shí)執(zhí)行(類(lèi)似__exit__方法)
from contextlib import contextmanager
import timedef adds():for i in range(3):print(i)time.sleep(1)@contextmanager
def timing_context(func):start_time = time.time()try:func()yield 'runtime' # 進(jìn)入上下文 yield后面的值,就會(huì)賦在 with語(yǔ)句的as 后面finally:end_time = time.time()elapsed_time = end_time - start_timeprint(f"Elapsed time: {elapsed_time} seconds")# 使用上下文管理器來(lái)測(cè)量代碼塊的執(zhí)行時(shí)間
with timing_context(adds) as msg:# 模擬耗時(shí)操作print(msg)# 上下文管理器會(huì)自動(dòng)計(jì)算和打印執(zhí)行時(shí)間