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