关于python上下文管理器

    技术2025-08-17  20

    首先介绍 上下文管理器协议:包含__enter__()和__exit__()方法 支持该协议的对象,称为上下文管理器

    上下文管理器的本质:支持with操作

    语句体:with 语句包裹起来的代码块

    在执行语句体之前会调用__enter__(),执行完语句体会调用__exit__()

    实现一个上下文管理器的方式有两种

    类中实现__enter__()和__exit__()方法使用contextmanager装饰函数

    代码示例:实现一个计算代码执行时间计算的上下文管理对象 基于类实现

    import time class Timer: def __enter__(self): self.start_time = time.time() def __exit__(self, exc_type, exc_val, exc_tb): self.end_time = time.time() time_diff = self.end_time - self.start_time print(time_diff) with Timer(): # 语句体 num_list = [i for i in range(100000)]

    基于装饰器实现

    import contextlib import time @contextlib.contextmanager def timer(): start_time = time.time() yield end_time = time.time() print(end_time - start_time) with timer(): # 语句体 num_list = [i for i in range(100000)]
    Processed: 0.013, SQL: 10