笔记·Python装饰器
装饰器
装饰器是给现有的模块增添新的小功能,可以对原函数进行功能扩展,而且还不需要修改原函数的内容,也不需要修改原函数的调用。
一切皆对象
首先我们来理解下 Python 中的函数:
在函数中定义函数
这个好理解,我们可以在函数中继续定义一个函数,例如在A函数中定义一个B函数并调用,但B函数不能被外部调用
在函数中返回函数
这个也好理解,我们可以在父函数中返回父函数中的子函数
将函数作为一个参数传给另一个参数
这个还是好理解,看一下下面的代码就明白了
一个简单的装饰器
接下来我们开始来做点有用的装饰器,就以统计函数运行时间为例吧
Outputs:
@语法糖
我们将会使用语法糖优化上述代码
装饰器传参
当我们的函数需要传递参数时,上面的例子可能就不适用了,这时我们可以使用以下方法:
outputs:
这是传入一个参数的例子,接下来我们尝试传入多个参数
outputs:
带参数的装饰器
用于在装饰器传入一些备注信息等之类的
类装饰器
上面咱们一起学习了怎么写装饰器函数,在python中,其实也可以同类来实现装饰器的功能,称之为类装饰器。类装饰器的实现是调用了类里面的__call__
函数。类装饰器的写法比我们装饰器函数的写法更加简单。
当我们将类作为一个装饰器,工作流程:
通过__init__()
方法初始化类
通过__call__()
方法调用真正的装饰方法
outputs:
评论区停用通知
由于评论审核机制迎来了一些人的不满 #2562 ,我们决定在机制改善前移除评论区功能,并逐步迁移至中国大陆服务器,敬请谅解~
在此之前,您可通过 邮件 和我联系