装饰器:本质是函数(装饰其它函数) 就是为其它函数添加附加功能

原则:1.不能修改被装饰函数的源代码

   2.不能修改被装饰的函数的调用方式

实现装饰器知识储备:

1.函数即变量

2.高阶函数:a.把一个函数名当做实参传给另外一个函数,(在不修改被装饰函数源代码情况下添加功能)b.返回值中包含函数名(不修改函数的调用方式)

3.嵌套函数a.

匿名函数:

lambda

高阶函数
import time
def car():#定义一个源代码
print ("in the car") def change_test(func):#定义一个改变函数的函数,传递函数参数
time_start=time.time()
time.sleep(3)
time_stop=time.time()
print("sleep in the change_test %s"%(time_stop-time_start))
return func
car=change_test(car)#把内存地址赋给原来的函数标识
car()

 实现装饰函数

import time
#实现功能,在不能改变原来的函数前添加功能。 #实现在测试函数的运行时间,不能改变原函数 def deco(func):#定义一个装饰器
def run_time(*args,**kwargs):#嵌套一个运行时间的函数 无论传什么参数都可以
start_time=time.time()
func(*args,**kwargs)#运行 函数 无论传什么参数都可以
stop_time=time.time()
print("该函数运行的时间是%s"%(stop_time-start_time)) return run_time#返回嵌套函数的内存地址 @deco#这一步是需要在哪个函数上装饰就在哪个函数前面加装饰。 它的功能相当于是比如 car=deco(car)
def car():#定义一个原函数
time.sleep(2)
print("in the car")
@deco
def baike(name):#有参数的函数
print("in the baike %s"%name) car()
baike("hunterYi")

  

最新文章

  1. 基于log4net的帮助类Log
  2. 6 Candy_Leetcode
  3. Hadoop学习2
  4. Spring Framework------>version4.3.5.RELAESE----->Reference Documentation学习心得----->Spring Framework的依赖注入和控制反转
  5. 今天简单说一下cdc 的使用
  6. Linux (二) vi
  7. Diskpart命令安装系统小结
  8. Mybatis3+Spring4+SpringMVC4 整合
  9. java中汉字自动转换成拼音
  10. 出色的 JavaScript API 设计秘诀
  11. ajax。表单
  12. Android利用反射获取状态栏(StatusBar)高度
  13. 【APS.NET 框架系列】浅谈ASP.NET 框架
  14. 整理volatile相关知识点
  15. L3-020 至多删三个字符 (30 分) 线性dp
  16. ubuntu apache2下目录结构以及重写规则
  17. 在Web根目录下建立testdb.php文件内容
  18. leetcode-algorithms-8 String to Integer (atoi)
  19. Golang福利爬虫
  20. web spring 容器

热门文章

  1. Linux服务器---百科mediawiki
  2. Netty源码分析之服务端启动
  3. 使用pm2-zabbix监控node工程
  4. nginx的ip_hash负载均衡配置
  5. 批处理学习之Bat命令——获取当前盘符、当前目录、上级目录
  6. Qt Windows打开指定文件注意替换双斜杠为单斜杠
  7. SSH 远程登陆
  8. 《Practical Vim》第八章:利用动作命令在文档中移动
  9. WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! --主机密钥验证失败
  10. blob对象的应用