当前位置: 首页 > news >正文

【python开发笔记】-- python装饰器

装饰器: 不修改被装饰对象的源代码,也不修改调用方式的前提下,给被装饰对象添加新的功能

原则:开放封闭原则

开放:对扩展功能(增加功能开放),扩展功能的意思是在源代码不做任何改变的情况下,为其增加功能

封闭:对修改源代码是封闭的

无参装饰器

基本模板

# 装饰器基本模板 -- 无参装饰器
def outer(func):def wrapper(*args, **kwargs):# 在这里要装饰之前的功能res = func(*args, **kwargs)# 在这里要装饰之后的功能return resreturn wrapper

案例演示

# 案例演示
import time
# 使用装饰器为函数增加计时功能
def count_time(func):def wrapper(*args, **kwargs):# 在这里要装饰之前的功能start_time = time.time()res = func(*args, **kwargs)# 在这里要装饰之后的功能end_time = time.time()print('函数执行一共耗时{}秒'.format(start_time-end_time))return resreturn wrapper# 功能函数
@count_time  # 使用装饰器对 time_func()进行装饰,增加了计时的功能
def time_func(n):time.sleep(n)print('{}秒后,打印这句话'.format(n))if __name__ == '__main__':time_func(5)

pycharm模板功能

使用pycharm自带的模板功能,快速创建模板

复制模板代码 ——> file ——>settings ——> editor ——> Live Templates (实时模板)

进入 Live Templates :

1、展开python,点击+ 选择 live Template

2、Abbreviation 输入快捷指令 , Description 输入模板描述, template text 粘贴进模板内容

3、点击difine ,勾选python。

完成之后,可以直接在代码编辑区输入快捷指令调出模板

在这里插入图片描述

完美伪装

将原函数的一些方法,传给装饰器,达到完美伪装

完美伪装的装饰器模板

from functools import wraps
def outer(func):@wraps(func)  # 用处是将原函数的属性传给装饰函数def wrapper(*args, **kwargs):# 在这里要装饰之前的功能res = func(*args, **kwargs)# 在这里要装饰之后的功能return resreturn wrapper

通过 from functools import wraps 引入一个 @wraps的装饰器,将源函数的一些属性传递给装饰器。比如:

print(time_func)  # 查看函数的内存地址
print(time_func.__name__)  # 查看函数的函数名
print(time_func.__doc__) # 查看函数的描述文档

案例:

import time
from functools import wraps
# 使用装饰器为函数增加计时功能
def count_time(func):@wraps(func)  # 用处是将原函数的属性传给装饰函数def wrapper(*args, **kwargs):# 在这里要装饰之前的功能start_time = time.time()res = func(*args, **kwargs)# 在这里要装饰之后的功能end_time = time.time()print('函数执行一共耗时{}秒'.format(start_time-end_time))return resreturn wrapper# 功能函数
@count_time  # 使用装饰器对 time_func()进行装饰,增加了计时的功能
def time_func(n, i):"""这个是一个被装饰函数@param n:@param i:@return:"""time.sleep(n)print('{}秒后,打印{}'.format(n, i))if __name__ == '__main__':# time_func(5, 'A')print(time_func)  # 查看函数的内存地址print(time_func.__name__)  # 查看函数的函数名print(time_func.__doc__) # 查看函数的描述文档

有参装饰器

模板

def g_outer(X):def outer(func):def wrapper(*args, **kwargs):# 在这里要装饰之前的功能res = func(*args, **kwargs)# 在这里要装饰之后的功能return resreturn wrapperreturn outer

应用有参装饰器时 @g_outer('X')

http://www.lryc.cn/news/457852.html

相关文章:

  • WEB攻防-python考点CTF与CMS-SSTI模板注入PYC反编译
  • Open3D实现点云数据的序列化与网络传输
  • 【C++11】右值引用
  • CSS元素显示类型
  • Flink 介绍(特性、概念、故障容错、运维部署、应用场景)
  • Python+Flask接口判断身份证省份、生日、性别、有效性验证+docker部署+Nginx代理运行
  • 门店收银营销活动打折特价-收银系统源码
  • QTabWidget的每个tab居中显示图标和文本
  • Ubuntu20.04如何安装Microsoft Edge浏览器?
  • 美团Java一面
  • C#中ref关键字和out关键字
  • 贴吧软件怎么切换ip
  • 图像分割恢复方法
  • Ultralytics:YOLO11使用教程
  • 前缀和算法——优选算法
  • YOLO11改进|注意力机制篇|引入HAT超分辨率重建模块
  • 老牛也想吃嫩草,思科为何巨资投入云初创CoreWeave?
  • Spring Boot 事务管理入门
  • 20年408数据结构
  • 4反馈、LC、石英、RC振荡器
  • go 的 timer reset
  • 每日一面 day03
  • ssm基于SSM框架的餐馆点餐系统的设计+VUE
  • 多人播报配音怎么弄?简单4招分享
  • 《Windows PE》4.1导入表
  • 计算机专业大学生应该如何规划大学四年?
  • R知识图谱1—tidyverse玩转数据处理120题
  • 【赵渝强老师】K8s中的有状态控制器StatefulSet
  • 机器学习笔记(持续更新)
  • Nginx 配置之server块