python装饰器代码简洁_Python基础知识之装饰器(示例代码)
装饰器
https://www.cnblogs.com/EVA-J/articles/7194277.html
1. 装饰器的形成过程
2.装饰器的作用
3.语法糖
原则: 开放封闭原则
----------------------------------------------------------------------------------------------------------------------------------------------------------------
固定模式:装饰器固定模式
===========================================================================================
1.
importtimedeffunc():
time.sleep(0.01)print("大家好")deftimer(f):
start=time.time()
f()
end=time.time()print(end-start)
timer(func)
解读这段代码 !
首先 ,我们定义一个函数 func为例实现 leader交给我的功能! ok ,这个func函数假装已经完成我们想要的功能 。
现在 我们想要在func函数的基础上增加 计算程序运行时间的功能,引入time 模块 ,通过 time.time()获取当前时间
这样 ,我们的func函数可以这样写
def func():
start = time.time() # 程序运行前时间
print("大家好,才是真的好!") # 这里假装是我们的业务逻辑代码,想象这有很多行好吧。
end = time.time() # 程序运行结束时间
print(end - start) # 获取时间差,就可以知道程序运行时间的长短了。
这样就是我们在函数原有的基础上扩展的功能 !
但是,违背了我们开发中的 开放-封闭原则!
开放:对扩展是开放的
封闭:对修改是封闭的
不想修改函数的调用方式,但是还在原有的函数前后添加功能
----------------------------------------------------------------------------------
那我们把 要增加功能的函数当作参数
增加一个装饰器函数
def timer(f):
def inner()
start = time.time()
f()
end = time.time()
print(end-start)
return inner
func = timer() # 这里返回的是inner 相当于把inner的内存地址赋值给了func
func() 这里实际执行的是 inner() ----- 最终获取了 print(end-start)
ok, 这就是我们的装饰器函数
timer就是一个装饰器函数,只是对一个函数 有一些装饰作用
===========================
语法糖的概念
就是让代码更简洁,像吃糖一样开心 ~~哈哈
@timer #装饰器函数的函数名
def func():
pass # 要贴着被装饰的函数
这才是真正的 不改变函数调用方式
装饰带参数函数的装饰器
19.27 动态参数 !!!
*arg **kwargs 能hold整个世界
wrapper 装饰器
www.cnblogs.com/eva-j/articles/7194277.html
python装饰器代码简洁_Python基础知识之装饰器(示例代码)相关推荐
- python猴子吃桃子的问题_Python基础知识初入门
想成为数据分析.机器学习.人工智能等领域的稀缺人才,就必须学会使用其相对应的编程语言,Python作为其主要的编程语言之一,在人工智能.大数据等领域有很大的需求和应用.以下是编程语言Python的基础 ...
- 下列哪个不是python元组的定义方式_Python基础知识笔试
Python基础知识笔试 单选题(2.5分*20题) 1. 下列哪个表达式在Python中是非法的? B A. x = y = z = 1 B. x = (y = z + 1) C. x, y = y ...
- python中prompt的意思_Python 基础知识入门
一.学习python数据分析前的准备工作:下载Anaconda anaconda是一个包管理器和环境管理器,其内置的jupyter notebook 功能非常强大,可以在jupyter noteboo ...
- python请输入用户名编程_Python基础练习之用户登录实现代码分享
导读热词 python版本为python3.5 @H_502_4@1.要求 1)输入用户名密码 2)认证成功后显示欢迎信息 3)输错三次后锁定 @H_502_4@2.需求分析 1)用户信息存储在文件中 ...
- python查看函数参数快捷键_Python基础知识—快捷键
最重要的快捷键 1. ctrl+shift+A:万能命令行 2. shift两次:查看资源文件 新建工程第一步操作 1. module设置把空包分层去掉,compact empty middle pa ...
- python中case的用法_python中Switch/Case实现的示例代码
python 的 python中Switch/Case实现的示例代码 学习Python过程中,发现没有switch-case,过去写C习惯用Switch/Case语句,官方文档说通过if-elif实现 ...
- python开发qq聊天机器人_Python qqbot 实现qq机器人的示例代码
qqbot 是一个用 python 实现的.基于腾讯 SmartQQ 协议的 QQ 机器人框架,可运行在 Linux . Windows 和 Mac OSX 平台下. 你可以通过扩展 qqbot 来实 ...
- python 语法错误 和异常_Python基础知识:新手学Python时常见的语法错误和异常
大家好,今天我们简单介绍下在学习Python时常见的一些错误和异常. 记得刚接触Python的时候,一条简单的语句在执行的时候却总能遇到报错.然后各种艰难的复查发现可能是循环语句缺少冒号啊.用了中文的 ...
- python 类 对象 知乎_python基础知识:类,对象,模块三者的区别
长话短说,我线代作业还没有写呢. 有点编程语言知识的朋友应该知道,编程语言有"面向对象"和"面向过程"两种. 解释一下:面向对象技术是目前流行的系统设计开发技术 ...
最新文章
- 主DNS服务-正向解析
- .NET WebAPI 用ExceptionFilterAttribute实现错误(异常)日志的记录(log4net做写库操作)
- golang-exec cmd data race
- 如何画架构图之C4模型画法
- Linux 查看CPU信息、机器型号等硬件信息
- webapi随机调用_BeetleX之webapi验证插件JWT集成
- Topaz DeNoise AI如何在Lightroom Classic中进行批量编辑?
- Spring Boot整合模板引擎freemarker
- 怎么查看虚拟机的IP地址?
- 移动开发者必须了解的10大跨平台工具
- Maxima 的基本微积分操作(链接)
- Jquery.ajax报parseerror Invalid JSON错误的原因和解决方法:不能解析
- TB-RK1808M0最新固件烧录和驱动更新
- org.postgresql.util.psqlexception总结
- VC6.0MFC下使用GDI++编译链接通不过的解决方案之一(syntax error : identifier 'Count')
- 关于URL重写的实现
- 如何看待中国制造2025?
- 浅聊DAO图景和未来
- 生鲜巨变:每日优鲜、叮咚买菜、盒马“分道扬镳”?
- 每天小练笔7-坐标变换
热门文章
- java 单链表是否有环,判断链表中是否有环
- 与熊论道为什么解码不了_楼上熊孩子瞎蹦跳,楼下邻居投诉无果,一招吓哭“熊一家”...
- 云原生的本质_云原生2.0的逻辑之辩,如何让每个企业都成为新云原生企业
- fsmc同步通信设置_微服务模式-同步与异步
- python3 def download_python3下载抖音视频
- XSSFWorkbook 设置单元格样式_如何设置Excel单元格才能只输入数字!
- mysql 表结构反转_一道经典的MySQL面试题,答案出现三次反转
- 树莓派连接usb手机_树莓派03 - 树莓派的VNC连接
- 曲线 神经网络_神经网络的数学基础-8(完结)
- 设计灵感|延展画面的插画Banner设计!