Python 高级
带参数装饰器
编写可接受参数的装饰器
- 理解三层嵌套装饰器
- 编写带参数的装饰器
- 装饰器实战应用
带参数装饰器
带参数的装饰器多了一层嵌套:外层接参数,中层接函数,内层跑逻辑。
示例代码(可运行)
Python 0%
权限检查装饰器
示例代码(可运行)
Python 0%
预测输出
def mul(n):
def d(f):
def w(x): return f(x)*n
return w
return d
@mul(3)
def f(x): return x
print(f(4))找 Bug带参数的装饰器得三层嵌套。@repeat(3)会先调用repeat(3),返回真正的装饰器。
@repeat(3)
def greet(): print("hi")
# repeat定义只有两层
def repeat(func):
def wrapper(): func()
return wrapper
填空题填写空白处的代码
def repeat(n):
def (func):
def w(): pass
return w
return decorator
选择题
@deco(5) 等价于?
资深工程师加餐
底层原理 · 大厂视角 · 工程经验,点卡片展开
with 语句等价于 try/finally:无论正常结束还是中途抛异常,退出时都会执行清理(关文件、释放锁、断开连接)。实现方式有两种:类里写 __enter__/__exit__,或用 contextlib.contextmanager 把生成器变成上下文管理器。凡是「打开了必须关闭/获取了必须释放」的资源,都应该用 with 托管。
挑战任务
带参装饰器挑战
简单+50 XP
实现@delay(seconds)延迟执行装饰器。
带参装饰器挑战
Python 0%
2 个测试用例
课后作业
缓存装饰器
中等+20 XP
实现@cache记忆化装饰器。
缓存装饰器
Python 0%
1 个测试用例