Python 教程 27:如何在 Python 中使用上下文管理器

Mondo 科技 更新 2024-02-19

我們在寫作的時候,經常會遇到需要管理資源的情況,比如開啟和關閉檔案,如果遇到一些異常,就需要關閉資源,否則會導致資源洩露,雖然我們可以手動關閉,但是如果有多個異常需要考慮,萬一不小心漏掉了乙個, 這將是芭比娃娃Q。 所以,如果有一種更優雅的方法來處理資源洩漏,那就太好了。 正是在這種背景下,Context Manager 誕生了。

上下文管理器是 Python 中的乙個物件,用於管理資源、執行特定操作和處理異常。 上下文管理器實現特定方法,使它們在 with 語句中可用,以確保正確獲取和釋放資源。

在 Python 中,上下文管理器通常使用類中的特殊方法實現,輸入和退出。 具體說來:

1. enter 方法在進入 with 語句塊時呼叫,通常用於獲取資源或執行一些初始化操作,一般返回 manager 物件。

2.退出方法在離開with塊時呼叫,無論**塊是否發生異常,都會執行該方法。 此方法通常用於釋放資源、清理工作和處理異常。 release 方法中有三個引數:異常型別、異常例項物件和異常堆疊物件。

class mycontextmanager:

def __enter__(self):

print("entering the context")

執行一些初始化操作,例如開啟資源。

return self

def __exit__(self, exc_type, exc_value, traceback):

print("exiting the context")

執行一些清理操作,例如關閉資源。

if exc_type is not none:

print(f"exception: ,")

true 返回值表示異常已處理,false 返回值表示異常已傳播。

return true

使用上下文管理器。

with mycontextmanager() as manager:

print("inside the context")

執行讀取和寫入資源等操作。

如果此處發生異常,則將該異常傳遞給 exit 方法進行處理。

例如,在上面的示例中,myContextManager 是乙個簡單的上下文管理器類,它實現 Enter 和 Exit 方法來定義上下文管理器的行為。 在 with 語句塊中使用上下文管理器會執行適當的操作(進入、執行、退出上下文)以確保正確管理資源。

上面的執行結果:

entering the context

inside the context

exiting the context

許多人說 with 語句用於建立上下文管理器,但準確地說,這是不正確的。 在前面的示例中,mycontextmanager它是一類上下文管理器,我們所說的建立上下文管理器無非是建立上下文管理器的物件。 下面這不會建立乙個上下文管理器物件嗎?

m = mycontextmanager()

所以準確地說,with語句是Python提供的用於管理上下文的語法結構,可以自動呼叫上下文管理器的enter和exit方法。 使用 with 語句,您可以確保在進入和退出塊時自動執行必要的操作。

例如,使用with用於開啟和關閉檔案的語句的上下文管理器:

with open('example.txt', 'r') as file:

content = file.read()

print(content)

在 with 塊結束後,檔案會自動關閉,即使發生異常,檔案也會正確關閉。

open 函式返回的檔案物件是乙個上下文管理器,它本身不需要實現,通過使用 with 關鍵字,它確保了 ** 塊執行後檔案將被正確關閉。 無需手動呼叫file.close()方法。 這樣提高了可讀性和可維護性,避免了忘記關閉檔案導致的資源洩漏問題。

當然,我們也可以自己手動實現檔案上下文管理器。

class filecontextmanager:

def __init__(self, file_name, mode):

self.file_name = file_name

self.mode = mode

def __enter__(self):

self.file = open(self.file_name, self.mode)

return self.file

def __exit__(self, exc_type, exc_value, exc_traceback):

if self.file:

self.file.close()

使用自定義檔案上下文管理器類開啟檔案。

with filecontextmanager('example.txt', 'w') as file:

file.write("程式設計師來了! ")

這是乙個相對簡單的檔案上下文管理器filecontextmanager('example.txt', 'w')及以上open('example.txt', 'r')功能幾乎相同。

這就是上下文管理器的簡要介紹。 總的來說,上下文管理器是 Python 提供的一種非常方便的資源管理機制,它可以幫助我們更好地管理和釋放資源,簡化邏輯,提高魯棒性,寫得更優雅,在專案開發中用起來很舒服。

相關問題答案

    Semrush 教程:如何使用主題研究工具擴充套件您的內容主題

    對於內容營銷人員來說,試圖繼續開發新的內容主題可能是乙個非常令人頭疼的問題。無論你是想寫乙個流行的部落格 一本電子書,還是乙個播客,你都需要有乙個好的主題和乙個吸引客戶點選的標題。SEMrush 提供了乙個工具課題研究幫助使用者更好地建立和組織內容主題。挖掘有吸引力的內容主題 及時了解最新趨勢並發現...

    如何在Python中高效編寫程式碼?Python實用程式設計技巧分享!

    Python 是一種高效 易學且功能強大的程式語言,具有許多實用的程式設計技巧,可以幫助開發人員更高效地編寫。以下是一些實用的 Python 程式設計技巧的細分和示例 .列表推導式 列表推理是一種在 Python 中建立和操作列表的簡潔 易於閱讀的方法。它可以使 更簡潔,減少冗餘。例如,將列表中的所...

    快樂學習Python,如何正確使用pandas處理時間型別資料?

    在日常資料分析中,資料通常按日期進行分析。例如,我們需要通過使用者的下單時間來分析使用者在不同時間段對產品的偏好 例如,使用訪問日誌的訪問時間來分析系統的訪問週期和負載,為不同時間段的資源分配提供依據。例如,通過使用者較短的刷牙時間分析使用者的行為特徵和工作時間和工作型別 可以看出,在資料分析中,基...

    如何使用翻轉筆,並提供詳細的教程和常見問題解答

    隨著數字技術的普及,翻頁筆已成為廣大使用者在PPT演示 報告等場合的有力助手。本文將為您詳細介紹翻轉筆的使用方法,並回答一些常見的相關問題。一 翻筆的使用 .準備工作 首先,確保你有翻轉筆和接收器。翻轉筆通常包括乙個雷射筆和兩個按鈕,乙個用於翻頁,另乙個用於雷射指向。.安裝接收器 將接收器插入計算機...

    KTCG27P6顯示器的效能如何? 分享使用者的真實評論

    年,一款名為KTCGP的顯示器將沉浸於人們的視野中。憑藉其出色的技術規格和出色的使用者體驗,這款顯示器在熙熙攘攘的顯示市場中開闢了一席之地。這款顯示器的魔力是什麼,贏得了如此多的使用者偏好?接下來,讓我們一起來乙個 KTCGP顯示器是第乙個獲得使用者關注的顯示器OLED畫素級光控技術高度讚揚。該技術...