# 装饰器的形成的过程:最简单的装饰器;有返回值的;有一个参数的;万能参数
# 装饰器的作用
# 原则:开放封闭原则
# 语法糖
# 装饰器的固定模式:
# def wrapper(f): # 装饰器函数,f是被装饰的函数
# def inner(*args,**kwargs):
# '''在被装饰函数之前要做的事'''
# res = f(*args,**kwargs) # 被装饰的函数
# '''在被装饰函数之后要做的事'''
# return res
# return inner import time
# print(time.time()) # 获取当前时间
# time.sleep(5) # 让程序在执行到这个位置的时候停一会 # def func():
# '''
# 计算程序运行所用时间
# :return: 程序运行时间
# '''
# start = time.time()
# print('老板好,同事好,大家好')
# time.sleep(0.01)
# end = time.time()
# print(end - start)
# func() # def timer(f): # 专门写一个函数,计算函数执行时间
# start = time.time()
# f()
# end = time.time()
# print(end - start)
# def func():
# time.sleep(0.01)
# print('老板好,同事好,大家好')
# timer(func) # def timer(f): # 装饰器函数
# def inner():
# start = time.time()
# res = f() # 被装饰的函数
# end = time.time()
# print(end - start)
# return res
# return inner
# @timer # 等于func = timer(func) 语法糖, @装饰器函数名,紧跟被装饰的函数
# def func(): # 被装饰的函数
# time.sleep(0.01)
# print('老板好,同事好,大家好')
# return '新年好'
# # func = timer(func)
# res = func()
# print(res) # 装饰器的作用:不想修改函数的调用方式, 但是还想在原来的函数前后添加功能
# timer就是一个装饰器函数,只是对一个函数 有一些装饰作用 # 原则:开放封闭原则
# 开放:对扩展是开放的
# 封闭:读修改是封闭的 #
# def outer():
# def inner():
# return 'inner'
# inner()
# outer()
#---------------------------------------------------------------------------------------------------------------- # 装饰带参数函数的装饰器
# def timer(f): # 装饰器函数
# def inner(*args,**kwargs):
# start = time.time()
# res = f(*args,**kwargs) # 被装饰的函数
# end = time.time()
# print(end - start)
# return res
# return inner
# @timer # 等于func = timer(func) 语法糖, @装饰器函数名,紧跟被装饰的函数
# def func(a,b): # 被装饰的函数
# time.sleep(0.01)
# print('老板好,同事好,大家好',a,b)
# return '新年好'
#
# @timer
# def func1(a): # 被装饰的函数
# time.sleep(0.01)
# print('老板好,同事好,大家好',a)
# return '新年好'
# res = func(1,b = 2)
# ret = func1(1)
# print(res,ret) #--------------------------------------------------------------------------------------------------------
def wrapper(f): # 装饰器函数,f是被装饰的函数
def inner(*args,**kwargs):
'''在被装饰函数之前要做的事'''
res = f(*args,**kwargs) # 被装饰的函数
'''在被装饰函数之后要做的事'''
return res
return inner @wrapper
def func(a,b): # 被装饰的函数
time.sleep(0.01)
print('老板好,同事好,大家好',a,b)
return '新年好'
res = func(1,b = 2)
print(res)

最新文章

  1. Linux环境下解压超过4GB的zip文件
  2. AppStore 上架注意事项及错误修改
  3. coreseek安装遇到的错误
  4. Android之使用Android-AQuery异步加载图片(一)
  5. centos下安装nginx和php-fpm
  6. 项目解析- JspLibrary - part3
  7. 优化sql,返回行数少情况下,NL比hash快好多
  8. Java Annotation 必须掌握的特性
  9. (转)ThinkPHP Where 条件中使用表达式
  10. [置顶] css3 befor after 简单使用 制作时尚焦点图相框
  11. OpenGL-----深度测试,剪裁测试、Alpha测试和模板测试
  12. cakephp 复杂查询
  13. unity3d 脚本学习系列
  14. [UWP]了解模板化控件(2.1):理解ContentControl
  15. 按键(vb)启动指定目录的程序以及获取当前应用路径
  16. JS中的位操作在实际项目中的应用
  17. spring boot 采坑
  18. 谁记录了mysql error log中的超长信息
  19. 20180426 Linq to excel
  20. GoogLeNetv3 论文研读笔记

热门文章

  1. SQLServer 在Visual Studio的2种连接方法
  2. 机器学习基石笔记:14 Regularization
  3. python实用库:PrettyTable 学习
  4. odoo开发笔记 -- odoo web机制浅析
  5. 再谈C#委托与事件
  6. idea自己用得到的命令
  7. Google Chrome Native Messaging开发实录(一)背景介绍
  8. 执行bin/hdfs haadmin -transitionToActive nn1时出现,Automatic failover is enabled for NameNode at bigdata-pro02.kfk.com/192.168.80.152:8020 Refusing to manually manage HA state的解决办法(图文详解)
  9. 全网最详细的Xshell或SecureCRT下spark-shell里出现无法退格或者删除的问题现象的解决办法(图文详解)
  10. Java设计模式之工厂方法模式(转) 实现是抽象工厂?