Python装饰器的用法

假如我们想写一个函数,用来计算其它函数的大概执行时间。代码如下:

计算函数myfunc的运行时间

但是有个问题,以后每次调用‘myfunc’处都要改为deco(myfunc)。下面我们换一种写法:

另一种写法

之所以要换成这种写法是因为我们要引入装饰器的一种语法糖写法--”@”语法糖来精简装饰器的代码:

@装饰器写法

其实,@deco的本质就是myfunc = deco(myfunc),认清这点后看后面带参数的装饰器就很简单了。


被装饰的函数带参数的情况

前面我们讨论的都是被装饰的函数本身没有参数的情况,下面我们讨论一个被装饰函数有参数的情况:

带参数的装饰器的写法

另外,如果我们的装饰器也可以通过可变参数形式来支持多个拥有不同参数形式的函数:

可变参数的装饰器写法

装饰器的参数

到目前为止,我们装饰器中的参数都是函数体,如果我们想给装饰器添加其它数据类型的参数怎么办呢?

装饰器添加参数的写法

我们可以给装饰器外再套一层函数,就可以添加参数了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 装饰模式有很多经典的使用场景,例如插入日志、性能测试、事务处理等等,有了装饰器,就可以提取大量函数中与本身功能无关...
    一誠阅读 3,287评论 0 0
  • 呵呵!作为一名教python的老师,我发现学生们基本上一开始很难搞定python的装饰器,也许因为装饰器确实很难懂...
    TypingQuietly阅读 19,772评论 26 186
  • 本文为《爬着学Python》系列第四篇文章。从本篇开始,本专栏在顺序更新的基础上,会有不规则的更新。 在Pytho...
    SyPy阅读 7,202评论 4 11
  • 今天天气多云,不冷不热,是夏季难得的清凉天气,在家中蛰居多时,颇感无聊,于是换了衣服去湿地公园转转。 虽然...
    猫咪的天空阅读 1,436评论 0 0
  • 人物介绍 狗狗:恩佐 狗狗男主人:丹尼 狗狗女主人:伊芙 狗狗小主人:丹尼和伊芙女儿,卓伊 去年的七月份,很有缘分...
    Diptyque阅读 3,780评论 0 0

友情链接更多精彩内容