博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python学习笔记5:装饰器
阅读量:5288 次
发布时间:2019-06-14

本文共 719 字,大约阅读时间需要 2 分钟。

一、什么是装饰器

  装饰器,它本身是一个函数。

  装饰器的作用在于,在不改变现有函数的调用方式的前提下,给其新增一些功能;这些功能一般都是公用的。

  它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。(此句引用:https://zhuanlan.zhihu.com/p/25648515)

 

二、学装饰器的前提知识

  1、函数即变量

  2、高阶函数

  3、函数嵌套

  以上三个知识点,在我的上一篇博客‘python学习笔记6:函数’里 有详细介绍,这里不赘述

 

三、一个例子

  1、场景:用python写了一个系统,项目已经上线,现在发现系统性能很差,想要写一个程序来统计每个函数的运行时间。

  2、假设系统中有成千上百的函数,如下是其中的一个:

    

 3、现在写一个函数来统计其运行时间,可以这么写:

  

4、如果按照3的方法,当系统中有很多很多个函数,就要一个一个调用timer函数来统计函数的运行时间,这样就很费时间。

  怎么办呢,接下来就引入装饰器:timer函数其实是一段公用的程序,对于系统中的每个函数都需要它来统计运行时间。

  这种情况下,我们就可以把这样一个公用的函数,内嵌定义在函数timer里, deco函数体就和3中的一样:

  

  

 

5、如果我们要定义函数时使用装饰器,为了避免run = timer(run) 这样的赋值语句,要用到装饰器的语法糖@,这样代码更加简洁而且高大上!

  完整的代码,如下:

  

 

运行结果是:

      

 

转载于:https://www.cnblogs.com/zhangying185/p/7011044.html

你可能感兴趣的文章
马利筋
查看>>
js基础——幕布
查看>>
多项式求逆
查看>>
dubbo的服务发现和注册如何实现
查看>>
docker 不同版本 添加--insecure-registry
查看>>
并发编程中的Callable,Future,FitureTask
查看>>
Java反射机制
查看>>
Oracle EBS AP更新供应商地址
查看>>
Perl语言入门笔记 第十章 其他控制结构(unless,until,elsif,for,last,next,redo,and,or)
查看>>
phpunit.xml
查看>>
php实现工厂模式
查看>>
ubuntu 安装maven提示出错 The program 'mvn' can be found in the following packages
查看>>
drwtsn32.exe 遇到问题须要关闭。我们对此引起的不便表示抱歉
查看>>
cocos2d-x3.0 Slider
查看>>
Python接口测试-使用requests模块发送GET请求
查看>>
List中的元素 去重
查看>>
7/27 进制转换
查看>>
解决nginx无法访问问题
查看>>
[老老实实学WCF] 第十篇 消息通信模式(下) 双工
查看>>
WCF随笔3----消息编码器
查看>>