Python面试题更新 2026-08-05

请从不同角度解释 Python3 中装饰器的用途、实现方式以及典型应用场景,并说明其执行时机。

技术原理Python

考察说明

考察对 Python 装饰器语法、机制及常见应用的理解。

回答思路

  1. 【回答框架 1】装饰器是一种接受函数作为参数并返回新函数的高阶函数,用于在不修改原函数代码的情况下增加功能。
  2. 【回答框架 2】基本用法:使用 @decorator_name 语法糖,等价于 func = decorator(func)。装饰器可以是有参数的(多层嵌套)或类实现的(实现 __call__)。
  3. 【回答框架 3】常见应用包括日志记录、性能计时、权限校验、缓存(如 functools.lru_cache)等。执行时机:装饰器在函数定义时即被调用,返回的新函数在每次调用时执行。
  4. 【回答框架 4】使用 functools.wraps 保留原函数的元信息(如 __name__、__doc__),避免调试困惑。
  5. 【关键点 1】装饰器是函数或类,接收函数并返回新函数。
  6. 【关键点 2】@ 语法糖等价于 func = decorator(func)。
  7. 【关键点 3】装饰器在定义时执行,返回的函数在调用时执行。
  8. 【关键点 4】有参装饰器需要三层嵌套(外层接收参数,中层接收函数,内层包装)。
  9. 【关键点 5】functools.wraps 用于保留原函数元信息。
  10. 【易错点 1】忘记使用 functools.wraps 导致函数元信息丢失。
  11. 【易错点 2】装饰器执行顺序:从下往上应用,从上往下执行包装逻辑。
  12. 【易错点 3】有参装饰器与非有参装饰器的写法混淆。