快速理解Python装饰器
Python 快速 理解 装饰
2023-09-11 14:17:14 时间
话不多说,直接上重点:
本质:Python函数
功能:可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象
主要需求场景:性能测试、插入日志、事务处理、缓存、权限校验等
优势:可以抽离出大量与函数功能本身无关的雷同代码并继续重用,即:为已经存在的对象添加额外的功能
实验代码:
# 初级版 def use_logging(func): def wrapper(*args, **kwargs): # logging.warning("{} is running...".format(func.__name__)) print("{} is running...".format(func.__name__)) return func(*args, **kwargs) return wrapper def bar(): print("I am a bar") # bar = use_logging(bar) # bar() # 标准版 @use_logging def foo(): print("I am a good boy") foo() print("*"*20) # 带参数装饰器 def use_logging_v2(level): def decorate(func): def wrapper(*args, **kwargs): # logging.warning("{} is running...".format(func.__name__)) print("{} is running...".format(func.__name__)) return func(*args, **kwargs) return wrapper return decorate @use_logging_v2(level=3) def brother(): print("I am a bigger boy") brother() # 性能分析监视器 def calc_time(func): def wrapper(*args, **kwargs): print("This is {} spent time".format(func.__name__), end=':') t1 = time.time() func(*args, **kwargs) t2 = time.time() print(t2-t1) return wrapper @calc_time def worker(steps): walks = [1] * steps @calc_time def doctor(steps): walks = [1 for i in range(steps)] nums = 100000000 print("*"*20) worker(nums) doctor(nums)
结果展示:
相关文章
- Python+NumPy绘制常见曲线的方法详解_python
- 实用 | 利用 aardio 配合 Python 快速开发桌面应用
- Python mplfinance库绘图① 基本参数介绍(简单秒懂)
- 【华为OD机试真题 python】快速开租建站【2023 Q1 | 100分】
- 【华为OD机试真题 python】租车骑绿岛【2022 Q4 | 100分】
- python适合做什么开发?
- 零基础自学Python需要多长时间从入门到精通?学python能兼职挣钱吗?怎么挣钱?
- Python分享:python爬虫可以用来做什么?
- 【python学习】Day1打卡-20210425
- 《Python游戏编程快速上手》——1.3 如何使用本书
- python 数据类型
- Python学习---IO的异步[twisted模块]
- 华为OD机试 - 敏感字段加密(Python)| 真题+思路+考点+代码+岗位
- Python 常见问题 之 python 安装包下载安装速度慢 的 快速解决方法(之一)
- 【Python爬虫】:使用高性能爬虫快速检验证代理IP是否有效
- 数据结构和算法:Python实现选择排序
- python第四十四课——继承性之单继承
- 【Python】python 库分类大全
- 【Linux学习笔记】解决:yum install python-dev 报错(CentOS安装Python-dev库)
- [Python]python+yaml三行代码完成配置文件灵活读取与warning:YAMLLoadWarning处理
- python连接mysql数据库把取数据存入数据库