25 分钟
Python 高级

装饰器基础

理解装饰器原理并编写简单装饰器

  • 理解装饰器是高阶函数
  • 编写计时和日志装饰器
  • 使用 functools.wraps

装饰器是什么

装饰器是接收函数、返回新函数的函数,用 @ 语法应用。

示例代码(可运行)
ℹ️@语法糖

@decorator 等价于 func = decorator(func)。装饰器不修改原函数代码,却能增加功能——这就是「装饰」的含义。

计时装饰器

示例代码(可运行)

functools.wraps

示例代码(可运行)
预测输出
def d(f):
    def w(): return f()*2
    return w
@d
def x(): return 5
print(x())
找 Bug装饰器函数没写return wrapper,被装饰的函数会变成None。
def d(f): def w(): f() @d def hi(): print("hi") hi()
填空题填写空白处的代码
@ def f(): pass
选择题

装饰器本质是?

资深工程师加餐

底层原理 · 大厂视角 · 工程经验,点卡片展开

@decorator 写在函数定义上方,它在「模块加载、函数被定义时」就执行一次,把原函数包装成新函数;之后每次调用,走的都是包装后的版本。带参数的装饰器本质是三层嵌套(外层收参数、中层收函数、内层收调用参数)。务必用 functools.wraps 保留原函数名和文档,否则调试栈和日志里全是 wrapper。

挑战任务

装饰器挑战

简单+50 XP

写一个装饰器,函数执行前打印时间戳。

装饰器挑战
2 个测试用例

课后作业

重试装饰器

中等+20 XP

实现失败自动重试3次的装饰器。

重试装饰器
1 个测试用例