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

需求:实现一个可以统计代码的运行时间

需求:有一个做加法计算的函数,要统计执行这个加法函数代码运行了多久

import timedef add(a, b):time.sleep(1)return a + bst = time.time()
add(100, 200)
et = time.time()
print("该函数运行时间为:", et - st)

学了闭包+装饰器后:

import time#  通过函数实现装饰器
def count_time(func):def wrapper(*args, **kwargs):st = time.time()res = func(*args, **kwargs)et = time.time()print("该函数运行时间为:", et - st)return resreturn wrapper@count_time
def add(a, b):time.sleep(1)return a + bprint(add(200, 300))

又学了魔术方法后:

import time# 通过类实现装饰器
class CountTime:def __init__(self, func):self.func = funcdef __call__(self, *args, **kwargs):st = time.time()res = self.func(*args, **kwargs)et = time.time()print("该函数运行时间为:", et - st)return res@CountTime  # add = CountTime(add)
def add(a, b):time.sleep(1)return a + bprint(add(200, 300))

需求升级:

装饰器接收一个int类型的参数n,可以用来装饰任何函数,如果函数运行时间大于n,则

打印“请耐心等待,马上回来”和统计函数的运行时间

# 通过函数实现装饰器
import timedef count_time_1(n):def count_time(func):def wrapper(*args, **kwargs):st = time.time()res = func(*args, **kwargs)et = time.time()print("该函数运行时间为:", et - st)if et - st > n:print("请耐心等待,马上回来")return resreturn wrapperreturn count_time@count_time_1(2)  # add = count_time(2)(add)
def add(a, b):time.sleep(2)return a + bprint(add(200, 300))
# 通过类实现装饰器
class CountTime:def __init__(self, n):self.n = ndef __call__(self, func):def wrapper(*args, **kwargs):st = time.time()res = func(*args, **kwargs)et = time.time()print("该函数运行时间为:", et - st)if et - st > self.n:print(f"运行时间超过{self.n}s,请耐心等待,马上回来")return resreturn wrapper@CountTime(1)  # add = CountTime(1)(add)
def add(a, b):time.sleep(1)return a + bprint(add(100, 200))

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

相关文章:

  • 软考高级之redis中使用zset实现延迟队列,你答对了么?
  • CS 下载安装详解
  • 前端canvas项目实战——在线图文编辑器(十):小地图MiniMap(上)
  • linux的chmod的数字太难记了,用u, g, o, a更简单!
  • 牛客热题:有效括号
  • 利用SQL语句实现多表联合查询——多表关系介绍
  • Java中IO流类的体系
  • 【调试笔记-20240521-Linux-编译 QEMU/x86_64 可运行的 OpenWrt 固件】
  • GitLab的原理及应用详解(六)
  • 【调和级数】100321. 优质数对的总数 II
  • Java SE入门及基础(54) 函数式接口
  • 轻松同步:将照片从三星手机传输到iPad的简便方法
  • MySQL查询某个字段含有字母数字的值
  • 通关!游戏设计之道Day14
  • 实现一个自定义 hook,用于强制刷新当前组件
  • 牛客热题:滑动窗口的最大值
  • Adobe产品安装目录修改
  • 时间(空间)复杂度(结构篇)
  • react记录部署
  • 【计算机毕业设计】基于SSM+Vue的校园美食交流系统【源码+lw+部署文档】
  • 「YashanDB迁移体验官」Mysql生产环境迁移至YashanDB数据库深度体验
  • qmt量化交易策略小白学习笔记第4期【qmt如何获取获取行情数据--内置python使用方法】
  • XXE(XML外部实体注入)
  • kafka 案例
  • 别被“涨价“带跑,性价比才是消费真理
  • GEE深度学习——使用Tensorflow进行神经网络DNN土地分类
  • 死锁示例(python、go)
  • Spring Cloud 面试题(五)
  • 源码编译安装LAMP
  • html5网页-浏览器中实现高德地图定位功能