直接上代码

# python万能装饰器实现计算函数的调用次数和执行时间
import timedef set_fun(func):num = 0  # 初始化次数def call_fun(*args, **kwargs):nonlocal num # 声明num 变当前作用域局部变量为最临近外层(非全局)作用域变量。start = time.time()  # 代码执行开始时间num += 1 # 每次调用次数加1print("测试功能:")func(*args, **kwargs) # 原函数end = time.time() # 代码执行结束时间longtime = end - startprint("此函数被调用%s次,本次调用花费时间:%s" % (num, longtime))return call_fun@set_fun
def test():print("测试中~~~~~")time.sleep(1)# 在这里调用三次函数
test()
test()
test()

运行效果如下

测试功能:
测试中~~~~~
此函数被调用1次,本次调用花费时间:1.0134446620941162
测试功能:
测试中~~~~~
此函数被调用2次,本次调用花费时间:1.0088226795196533
测试功能:
测试中~~~~~
此函数被调用3次,本次调用花费时间:1.0122005939483643

python万能装饰器实现计算函数的调用次数和执行时间相关推荐

  1. 如何写一个Python万能装饰器,既可以装饰有参数的方法,也可以装饰无参数方法,或者有无返回值都可以装饰

    需求:定义一个装饰器,既可以装饰有参数的方法,又可以装饰没有参数的方法,既可以装饰有返回值的方法,又可以装饰没有返回值的方法 代码如下: def decorate(test): #定义一个装饰器函数d ...

  2. python用装饰器实现缓存函数执行结果

    2019独角兽企业重金招聘Python工程师标准>>> 根据调用的函数名和调用的参数,对函数的结果进行缓存,下次执行的时候就不用重复计算 可以用装饰器来实现 # encoding:u ...

  3. python 自定义装饰器 来验证函数参数

    # -*- coding: utf-8 -*- # by dl from inspect import signature # 用来获取函数的一些信息# 自定义参数验证装饰器 def typeasse ...

  4. python类装饰器详解-Python装饰器详解

    python的装饰器其实是一个语法糖,第一行是@跟着一个表达式:第二行必须以def或者class起始(亦即函数或者class的定义). python的装饰器,必须是可调用的对象,而且必须是可以以一个参 ...

  5. python学习-装饰器(decorator)

    文章目录 装饰器 普通装饰器 装饰器带参数 类装饰器 类方法装饰器 装饰器 装饰器(Decorators)是 Python 的一个重要部分.简单地说:他们是修改其他函数的功能的函数. 普通装饰器 个人 ...

  6. python高阶函数闭包装饰器_5.初识python装饰器 高阶函数+闭包+函数嵌套=装饰器...

    一.什么是装饰器? 实际上装饰器就是个函数,这个函数可以为其他函数提供附加的功能. 装饰器在给其他函数添加功能时,不会修改原函数的源代码,不会修改原函数的调用方式. 高阶函数+函数嵌套+闭包 = 装饰 ...

  7. python装饰器函数-python装饰器1:函数装饰器详解

    先混个眼熟 谁可以作为装饰器(可以将谁编写成装饰器): 函数 方法 实现了__call__的可调用类 装饰器可以去装饰谁(谁可以被装饰): 函数 方法 类 基础:函数装饰器的表现方式 假如你已经定义了 ...

  8. Python: 使用装饰器“@”取得函数执行时间

    class A(): Python: 使用装饰器"@"取得函数执行时间 - oldJ的学习笔记 - 博客频道 - CSDN.NET Python: 使用装饰器"@&quo ...

  9. python 运行时间 装饰器_python 装饰器统计某个函数的运行时间

    import datetime def count_time(func): def int_time(*args, **kwargs): start_time = datetime.datetime. ...

最新文章

  1. 浅谈构建 apache 2 虚拟主机[zt]
  2. 简明Vim练级攻略(转)
  3. Vista,Windows7中给IIS7添加PHP支持
  4. Java Set接口详细讲解 TreeSet的定制排序和自然排序
  5. Ubuntu18.04上手配置入门指南
  6. qpushbutton设置两个图标_宝马显示屏上的各种图标是啥意思,这里分享几个问的最多的!...
  7. java rome_Rome使用入门
  8. 程序员,过了 40 岁,连 107 岁的 IBM 都不要我们了!
  9. spring实例化前的准备操作
  10. uibot中级认证试题_喜大普奔丨UiBot中级认证工程师考试上线啦!
  11. webstorm激活破解
  12. VSCode svn忽略文件提交
  13. vue2-ts-template vue2后台管理系统模板
  14. excel转word_excel怎么转word?常用方法合集,看你使用哪一种
  15. 【案例分享】让新时代教育发展与“数”俱进
  16. 如何从阿里云官方镜像站下载ubuntu并安装
  17. Vue+高德地图API的使用(插件的使用)
  18. 【愚公系列】2021年12月 Redis数据库-集群的搭建
  19. 安全加密 - 秘钥和算法关系
  20. 没有激光雷达设备,只有无人机也可以生成真地形(DEM)和等高线(CAD)

热门文章

  1. GameFramework教程✨五、界面,即UI
  2. 大模型时代下智能文档处理核心技术大揭秘
  3. 使用 Mitmdump 与 Python 脚本进行密码嗅探
  4. python中isnumeric() 方法
  5. 计算机专业试讲10分钟教案,10分钟搞定一份满意的试讲教案!(适用所有学科)...
  6. 马斯克让猴子学会意念打字!还用人脑模型演示背后原理,电线入脑清晰可见...
  7. 数据结构之排序:直接选择排序
  8. 鼠标控制物体移动旋转缩放
  9. CSDN软件英雄会流水帐
  10. 轻量级过程改进之我见