函数的装饰器.

1. 装饰器

开闭原则:

对功能的扩展开放

对代码的修改是封闭

通用装饰器语法:

def wrapper(fn):
def inner(*args, **kwargs): # 聚合
"""在目标函数之前的内容"""
ret = fn(*arg, **kwargs) # 打散
"""在目标函数之后的内容"""
return ret
return inner
@wrapper
def func():
pass
func()

2. 同一个函数被多个装饰器装饰

就近原则

def wrapper1(fn):
def inner(*args, **kwargs):
print("")
ret = fn(*args, **kwargs)
print("")
return ret
return inner def wrapper2(fn):
def inner(*args, **kwargs):
print("")
ret = fn(*args, **kwargs)
print("")
return ret
return inner def wrapper3(fn):
def inner(*args, **kwargs):
print("")
ret = fn(*args, **kwargs)
print("")
return ret
return inner
# 顺序 1 2 3 func 3 2 1
@wrapper1
@wrapper2
@wrapper3
def func():
print("我是谁,我在哪")
func() # 1 3 5 我是谁,我在哪 6 4 2

3. 带参数的装饰器

def wrapper_out(参数):
def wrapper(fn):
def inner(*args, **kwargs): # 聚合
"""在目标函数之前的内容"""
ret = fn(*arg, **kwargs) # 打散
"""在目标函数之后的内容"""
return ret
return inner
return wrapper
@wrapper_out(实参) # 执行的时候. 先执行函数的调用然后使用返回值和前面的@组合成装饰器语法糖
def func():
pass

最新文章

  1. Shell_3 函数
  2. PLC M8000 M8001 M8002 M8003
  3. raspberry pi
  4. 我们应该如何去了解JavaScript引擎的工作原理
  5. js string to int
  6. 更新EF,EF 报错
  7. 错误:升级为xcode8之后无法上网的解决方法
  8. PRML Chapter 2. Probability Distributions
  9. bzoj 4237稻草人
  10. [HDOJ5726]GCD(RMQ,二分)
  11. hdu 5500 Reorder the Books(规律)
  12. php获取分类以下的全部子类方法
  13. Mysql高级之主从复制
  14. 架构之路 之 Nginx实现负载均衡
  15. 详解Tomcat线程池原理及参数释义
  16. JavaScript引用类型-Object类型
  17. .net DLL版本管理
  18. bzoj1038(半平面交)
  19. Miller-Rabin判质数和Pollared-Rho因数分解
  20. JdbcTemplate应用学习

热门文章

  1. SpringBoot | Thymeleaf | 局部更新
  2. PostgreSQL-4-DML数据操纵语言
  3. C# 基础之类的实例化
  4. [coci2015-2016 coii] dijamant【图论】
  5. HDU 5974 A Simple Math Problem 数学题
  6. 一次Socket通信联想到的Zookeeper源码实现
  7. Linux 安装gcc4.8版本
  8. JsonConvert对象实现json与对象之间的转换
  9. div+css 布局经验 - 最简单的 = 最不变形的(原创技巧)
  10. Memcache笔记01-Memcache的安装