成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python 進階: 上下文管理器

開發
上下文管理器通過封裝資源管理邏輯,顯著提升代碼的可讀性和健壯性。掌握其自定義方法和高級特性,能讓你編寫更優雅、安全的 Python 代碼。?

在Python中,上下文管理器(Context Manager)是一種用于管理資源(如文件、網絡連接、鎖等)的對象,它確保在使用完資源后能夠正確釋放或清理資源。

上下文管理器通常與with語句一起使用。一個著名的例子是 with open() 語句:

with open('notes.txt', 'w') as f:
    f.write('some todo...')

這將打開一個文件,并確保在程序執行離開 with 語句的上下文之后自動將其關閉。

它還處理異常,并確保即使在發生異常的情況下也能正確關閉文件。 在內部,上面的代碼翻譯成這樣的東西:

f = open('notes.txt', 'w')
try:
    f.write('some todo...')
finally:
    f.close()

應用場景

  • 成對操作:打開/關閉、獲取/釋放、開始/結束
  • 資源清理:需要確保資源釋放(即使發生異常)
  • 狀態切換:需要臨時修改全局狀態后恢復
  • 異常處理:需要統一處理特定錯誤
  • 性能監控:需要精確測量代碼塊執行時間

自定義上下文管理器

  • __enter__():進入上下文時調用,返回資源對象
  • __exit__():退出上下文時調用,處理異常和清理
class ManagedFile:
    def __init__(self, filename):
        print('init', filename)
        self.filename = filename

    def __enter__(self):
        print('enter')
        self.file = open(self.filename, 'w')
        return self.file

    def __exit__(self, exc_type, exc_value, exc_traceback):
        if self.file:
            self.file.close()
        print('exit')

with ManagedFile('notes.txt') as f:
    print('doing stuff...')
    f.write('some todo...')

contextlib 裝飾器

除了編寫類,我們還可以編寫一個生成器函數,并使用 contextlib.contextmanager 裝飾器對其進行裝飾。 然后,我們也可以使用 with 語句調用該函數。

對于這種方法,函數必須在 try 語句中 yield 資源,并且釋放資源的 __exit__ 方法的所有內容現在都在相應的 finally 語句內。

from contextlib import contextmanager

@contextmanager
def file_manager(filename, mode):
    file = open(filename, mode)  # 相當于 __enter__
    try:
        yield file  # 返回資源對象
    finally:
        file.close()  # 相當于 __exit__

# 使用示例
with file_manager("test.txt", "w") as f:
    f.write("Hello Context Manager!")

高級功能

(1) 異常處理

在 __exit__() 中可通過參數獲取異常信息:

  • exc_type:異常類型
  • exc_val:異常值
  • exc_tb:異常堆棧
def __exit__(self, exc_type, exc_val, exc_tb):
    if exc_type:
        print(f"Exception handled: {exc_val}")
    self.cleanup()
    return True  # 返回 True 表示異常已被處理

(2) 嵌套上下文管理器

with open("file1.txt") as f1, open("file2.txt") as f2:
    data1 = f1.read()
    data2 = f2.read()
    # 自動關閉兩個文件

(3) 異步上下文管理器

class AsyncConnection:
    async def __aenter__(self):
        await self.connect()
        return self
    
    async def __aexit__(self, exc_type, exc, tb):
        await self.close()

# 使用
async with AsyncConnection() as conn:
    await conn.send_data()

上下文管理器通過封裝資源管理邏輯,顯著提升代碼的可讀性和健壯性。掌握其自定義方法和高級特性,能讓你編寫更優雅、安全的 Python 代碼。

責任編輯:趙寧寧 來源: 程序員老朱
相關推薦

2014-04-04 10:27:00

Python上下文管理器

2022-06-29 14:15:01

Python計時器上下文管理器

2022-11-03 08:29:32

編程管理器協議

2023-11-16 08:46:27

上下文管理器Python

2024-11-14 09:00:00

Python上下文管理器

2023-12-10 13:37:23

Python編程上下文管理

2017-05-11 14:00:02

Flask請求上下文應用上下文

2012-12-31 10:01:34

SELinuxSELinux安全

2022-09-14 13:13:51

JavaScript上下文

2021-11-03 16:41:30

Windows 11操作系統微軟

2022-09-15 08:01:14

繼承基礎設施基礎服務

2017-12-17 17:01:23

限界上下文系統模型

2022-10-28 16:24:33

Context上下文鴻蒙

2024-09-30 14:10:00

2025-03-18 08:14:05

2023-07-11 10:02:23

2020-07-24 10:00:00

JavaScript執行上下文前端

2021-07-26 07:47:36

Cpu上下文進程

2025-04-03 07:33:56

2010-02-25 17:04:54

WCF實例上下文
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 97精品国产97久久久久久免费 | 免费看黄色视屏 | 欧美一区成人 | 日韩视频精品在线 | 日本久久精 | 成人免费视屏 | 久久久91精品国产一区二区精品 | 免费看91| 日韩资源 | 午夜av毛片| 日韩一及片 | 午夜理伦三级理论三级在线观看 | 午夜男人天堂 | 一区中文字幕 | 国产免费一区二区三区 | 亚洲色欲色欲www | 国产精品亚洲一区二区三区在线 | 日韩一区二区三区在线观看 | 亚洲精品一区二区在线观看 | 欧美一区二区免费 | 狠狠色综合网站久久久久久久 | 99re在线视频观看 | 中文字幕免费视频 | 亚洲综合视频 | h视频免费在线观看 | 一级黄片一级毛片 | 龙珠z国语版在线观看 | 国产精品一区一区 | 人人做人人澡人人爽欧美 | 亚洲国产精品久久久久 | 中文天堂在线观看 | 毛片免费观看视频 | 欧美精品一区二区三区在线播放 | 亚洲国产精品一区二区三区 | 欧美不卡一区 | 成年人免费在线视频 | 嫩草视频在线 | 欧美性精品 | 一道本不卡 | 超碰成人免费 | 久久久久久国产精品 |