编程学习网 > 编程语言 > Python > Python装饰器(decorator)的实现原理,如何带参数的装饰器?
2025
09-16

Python装饰器(decorator)的实现原理,如何带参数的装饰器?


我昨天晚上正好在公司楼下等外卖,边刷手机边想起群里有人问过“装饰器是怎么实现的,带参数的装饰器又是怎么回事”,这个话题还挺常见的,就随手聊聊。别担心,我不会用那种特别玄乎的说法,就像平时我们闲聊写代码一样。

装饰器的原理

其实你可以把装饰器理解成“套娃”。本质就是一个函数,接收另一个函数作为参数,然后返回一个新的函数。新的函数里可以在原函数执行前后,加一些你想要的逻辑。

比如最常见的打印日志:


运行的时候,你会看到调用顺序被“包裹”起来了。核心原理就是:函数是对象,可以作为参数传递

带参数的装饰器

有些时候光打印还不够,比如我想让日志带点标记,或者限制某个参数范围,这就需要“装饰器的装饰器”了。换句话说,就是再多包一层,让外面这一层能接收参数。

举个例子,给每个函数打一个“标签”:

这里@tag("DEBUG")其实先执行的是tag("DEBUG"),返回一个decorator,然后再把add交给它处理。这样,你就可以在不同的地方传不同的参数,实现更灵活的功能。

所以,装饰器本质就是函数嵌套 + 返回函数。带参数的装饰器,就是在最外层多一层函数,把参数收进来,再返回真正的装饰器。

我个人感觉啊,理解这个东西最关键就是别死盯着“语法糖@xxx,你把它展开来看,就很清楚了。

对了,你要不要我顺便写一个实际点的例子,比如限制函数调用时间、或者权限校验的?那样更贴近我们平时业务里的场景。

以上就是“Python装饰器(decorator)的实现原理,如何带参数的装饰器?的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取