装饰器

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基础知识之装饰器(示例代码)相关推荐

  1. python猴子吃桃子的问题_Python基础知识初入门

    想成为数据分析.机器学习.人工智能等领域的稀缺人才,就必须学会使用其相对应的编程语言,Python作为其主要的编程语言之一,在人工智能.大数据等领域有很大的需求和应用.以下是编程语言Python的基础 ...

  2. 下列哪个不是python元组的定义方式_Python基础知识笔试

    Python基础知识笔试 单选题(2.5分*20题) 1. 下列哪个表达式在Python中是非法的? B A. x = y = z = 1 B. x = (y = z + 1) C. x, y = y ...

  3. python中prompt的意思_Python 基础知识入门

    一.学习python数据分析前的准备工作:下载Anaconda anaconda是一个包管理器和环境管理器,其内置的jupyter notebook 功能非常强大,可以在jupyter noteboo ...

  4. python请输入用户名编程_Python基础练习之用户登录实现代码分享

    导读热词 python版本为python3.5 @H_502_4@1.要求 1)输入用户名密码 2)认证成功后显示欢迎信息 3)输错三次后锁定 @H_502_4@2.需求分析 1)用户信息存储在文件中 ...

  5. python查看函数参数快捷键_Python基础知识—快捷键

    最重要的快捷键 1. ctrl+shift+A:万能命令行 2. shift两次:查看资源文件 新建工程第一步操作 1. module设置把空包分层去掉,compact empty middle pa ...

  6. python中case的用法_python中Switch/Case实现的示例代码

    python 的 python中Switch/Case实现的示例代码 学习Python过程中,发现没有switch-case,过去写C习惯用Switch/Case语句,官方文档说通过if-elif实现 ...

  7. python开发qq聊天机器人_Python qqbot 实现qq机器人的示例代码

    qqbot 是一个用 python 实现的.基于腾讯 SmartQQ 协议的 QQ 机器人框架,可运行在 Linux . Windows 和 Mac OSX 平台下. 你可以通过扩展 qqbot 来实 ...

  8. python 语法错误 和异常_Python基础知识:新手学Python时常见的语法错误和异常

    大家好,今天我们简单介绍下在学习Python时常见的一些错误和异常. 记得刚接触Python的时候,一条简单的语句在执行的时候却总能遇到报错.然后各种艰难的复查发现可能是循环语句缺少冒号啊.用了中文的 ...

  9. python 类 对象 知乎_python基础知识:类,对象,模块三者的区别

    长话短说,我线代作业还没有写呢. 有点编程语言知识的朋友应该知道,编程语言有"面向对象"和"面向过程"两种. 解释一下:面向对象技术是目前流行的系统设计开发技术 ...

最新文章

  1. 主DNS服务-正向解析
  2. .NET WebAPI 用ExceptionFilterAttribute实现错误(异常)日志的记录(log4net做写库操作)
  3. golang-exec cmd data race
  4. 如何画架构图之C4模型画法
  5. Linux 查看CPU信息、机器型号等硬件信息
  6. webapi随机调用_BeetleX之webapi验证插件JWT集成
  7. Topaz DeNoise AI如何在Lightroom Classic中进行批量编辑?
  8. Spring Boot整合模板引擎freemarker
  9. 怎么查看虚拟机的IP地址?
  10. 移动开发者必须了解的10大跨平台工具
  11. Maxima 的基本微积分操作(链接)
  12. Jquery.ajax报parseerror Invalid JSON错误的原因和解决方法:不能解析
  13. TB-RK1808M0最新固件烧录和驱动更新
  14. org.postgresql.util.psqlexception总结
  15. VC6.0MFC下使用GDI++编译链接通不过的解决方案之一(syntax error : identifier 'Count')
  16. 关于URL重写的实现
  17. 如何看待中国制造2025?
  18. 浅聊DAO图景和未来
  19. 生鲜巨变:每日优鲜、叮咚买菜、盒马“分道扬镳”?
  20. 每天小练笔7-坐标变换

热门文章

  1. java 单链表是否有环,判断链表中是否有环
  2. 与熊论道为什么解码不了_楼上熊孩子瞎蹦跳,楼下邻居投诉无果,一招吓哭“熊一家”...
  3. 云原生的本质_云原生2.0的逻辑之辩,如何让每个企业都成为新云原生企业
  4. fsmc同步通信设置_微服务模式-同步与异步
  5. python3 def download_python3下载抖音视频
  6. XSSFWorkbook 设置单元格样式_如何设置Excel单元格才能只输入数字!
  7. mysql 表结构反转_一道经典的MySQL面试题,答案出现三次反转
  8. 树莓派连接usb手机_树莓派03 - 树莓派的VNC连接
  9. 曲线 神经网络_神经网络的数学基础-8(完结)
  10. 设计灵感|延展画面的插画Banner设计!