Python函数的装饰器
2024-10-21 05:43:45
函数的装饰器.
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
最新文章
- Shell_3 函数
- PLC M8000 M8001 M8002 M8003
- raspberry pi
- 我们应该如何去了解JavaScript引擎的工作原理
- js string to int
- 更新EF,EF 报错
- 错误:升级为xcode8之后无法上网的解决方法
- PRML Chapter 2. Probability Distributions
- bzoj 4237稻草人
- [HDOJ5726]GCD(RMQ,二分)
- hdu 5500 Reorder the Books(规律)
- php获取分类以下的全部子类方法
- Mysql高级之主从复制
- 架构之路 之 Nginx实现负载均衡
- 详解Tomcat线程池原理及参数释义
- JavaScript引用类型-Object类型
- .net DLL版本管理
- bzoj1038(半平面交)
- Miller-Rabin判质数和Pollared-Rho因数分解
- JdbcTemplate应用学习
热门文章
- SpringBoot | Thymeleaf | 局部更新
- PostgreSQL-4-DML数据操纵语言
- C# 基础之类的实例化
- [coci2015-2016 coii] dijamant【图论】
- HDU 5974 A Simple Math Problem 数学题
- 一次Socket通信联想到的Zookeeper源码实现
- Linux 安装gcc4.8版本
- JsonConvert对象实现json与对象之间的转换
- div+css 布局经验 - 最简单的 = 最不变形的(原创技巧)
- Memcache笔记01-Memcache的安装