面试题答案
一键面试with语句的作用
with
语句用于简化资源管理,比如文件的打开与关闭、网络连接的建立与断开等。它能确保在代码块执行完毕后,自动正确地释放相关资源,避免因异常等情况导致资源未被释放的问题。
自定义上下文管理器类示例
class MyContextManager:
def __init__(self):
print("初始化上下文管理器")
def __enter__(self):
print("进入上下文管理器,返回资源")
return self # 可以返回任何需要管理的资源
def __exit__(self, exc_type, exc_value, traceback):
print("退出上下文管理器,释放资源")
if exc_type is not None:
print(f"处理异常: {exc_type}, {exc_value}")
return True # 表示异常已处理,不向上传播
with MyContextManager() as manager:
print("在上下文管理器内部执行代码")
在上述代码中:
__init__
方法用于初始化上下文管理器。__enter__
方法在进入with
代码块时被调用,返回的对象会绑定到as
关键字后的变量(这里是manager
),可在此方法中进行资源的获取等操作。__exit__
方法在离开with
代码块时被调用,无论是否发生异常都会执行,可在此方法中进行资源的释放等操作。如果__exit__
方法返回True
,则表示异常已被处理,不会向上传播。