Python 高级
上下文管理器
使用 with 语句管理资源
- 理解上下文管理器协议
- 使用 __enter__/__exit__
- contextlib 简化写法
为什么需要 with
示例代码(可运行)
Python 0%
自定义上下文管理器
示例代码(可运行)
Python 0%
contextlib.contextmanager
示例代码(可运行)
Python 0%
预测输出
class C:
def __enter__(self): print("enter")
def __exit__(self,*a): print("exit")
with C(): print("inside")找 Bugwith块外文件已关闭,再写入会ValueError。
with open("f.txt","w") as f:
f.write("hi")
f.write("more")
填空题填写空白处的代码
with open("f.txt") f:
print(f.read())
选择题
__exit__ 返回 True 会?
资深工程师加餐
底层原理 · 大厂视角 · 工程经验,点卡片展开
@decorator 写在函数定义上方,它在「模块加载、函数被定义时」就执行一次,把原函数包装成新函数;之后每次调用,走的都是包装后的版本。带参数的装饰器本质是三层嵌套(外层收参数、中层收函数、内层收调用参数)。务必用 functools.wraps 保留原函数名和文档,否则调试栈和日志里全是 wrapper。
挑战任务
上下文管理器挑战
简单+50 XP
实现一个缩进打印上下文管理器。
上下文管理器挑战
Python 0%
2 个测试用例
课后作业
临时目录
中等+20 XP
写个上下文管理器,能自动建临时目录、用完自动删。
临时目录
Python 0%
1 个测试用例