python测试一段代码运行时间的优雅方法

python测试一段代码运行时间的优雅方法

前言:

这个PER的全面整理,简直害死人,怎么这么多事儿?
需要补的知识点太多了啊~
为了要测试PER的时间消耗,都在哪儿,我要记录程序执行的过程中,关键语句的运行时间。
最简陋的方法其实很简单,三句话:

import time
...
st = time.time()
results = function(args)
cost = time.time()-st

但这个代码不适合大面积广泛使用,对于少数几个语句操作还好,凑活着看也行。
因此我刚开始想的是,能不能写个函数:

def cost_time(function, args):
	st = time.time()
	results = funtcion(args)
	cost = time.time()-st
	return results, cost

但是这个直接报错好吧,根本不能这么把函数当参数传入。

基于类修饰器的时间计算:

参考代码:
https://github.com/JaloMu/iTimer/blob/master/iTimer.py

import time
from functools import wraps


class Timeit:
    def __init__(self, fn = None):
            wraps(fn)(self)

    def __call__(self, *args, **kwargs):
        start = time.time()
        ret = self.__wrapped__(*args, **kwargs)
        cost = time.time() - start
        return ret, cost


if __name__ == "__main__":
    @Timeit
    def add(x, y):
        return x+y
    r, cost = add(2, 3)
    print("r:", r)
    print("cost:", cost)    

基于函数修饰器:

参考链接:
如何理解Python装饰器? - NET.Dzreal的回答 - 知乎

import time


# 定义装饰器
def time_calc(func):
    def wrapper(*args, **kargs):        
        start_time = time.time()        
        f = func(*args,**kargs)        
        exec_time = time.time() - start_time   
        print("func.name:{}\texec_time:{}".format(func.__name__, exec_time))    
        return f    
    return wrapper   
    
# 使用装饰器
@time_calc    
def add(a, b):
    return a + b
    
@time_calc
def sub(a, b):    
    return a - b

sum = add(1, 3)
part = sub(23, 1)

好处在于只需要在函数定义的时候,加上修饰器语句,调用的语句一点都不用动,麻烦在于,无法全局判断,是否打印这些花里胡哨的东西。

判断是否打印的升级版

import time


# 定义装饰器
def time_calc(print_flag):
    def inner_time_calc(func):
        def wrapper(*args, **kargs):        
            start_time = time.time()        
            f = func(*args,**kargs)        
            exec_time = time.time() - start_time  
            if print_flag: 
                print("func.name:{}\texec_time:{}".format(func.__name__, exec_time))    
            return f    
        return wrapper   
    return inner_time_calc
    
# 使用装饰器
# print_flag = False
print_flag = True
@time_calc(print_flag=print_flag)    
def add(a, b):
    return a + b
    
@time_calc(print_flag=print_flag)
def sub(a, b):    
    return a - b

sum = add(1, 3)
part = sub(23, 1)

总结:

最后一个效果不错!
nice好吧

### 回答1: 好的,这是如何使用 Python 和 Flask 来构建一个后端的基本流程: 1. 安装 Flask:使用 pip 安装 Flask 库:`pip install Flask` 2. 创建一个 Flask 应用:创建一个名为 app.py 的文件,并在该文件中导入 Flask 库。 3. 编写 Flask 应用:在 app.py 文件中,使用 Flask 库创建一个 Flask 应用。 4. 定义路由:使用 Flask 应用定义路由,即 URL 地址。 5. 启动服务:使用 Flask 应用启动服务,以便对外提供服务。 以下是一个简单的 Flask 应用的示例代码: ``` from flask import Flask app = Flask(__name__) @app.route("/") def home(): return "Hello, Flask!" if __name__ == "__main__": app.run() ``` 运行这段代码,Flask 将在本地启动一个服务,可以通过浏览访问 http://localhost:5000/ 来查看 "Hello, Flask!" 的结果。 ### 回答2: Python是一种高级编程语言,具有简单易学、语法优雅、功能强大等优点,广泛应用于Web开发。而Flask是一个基于Python的轻量级Web应用框架,非常适合用于构建后端服务。 使用Python编写Flask后端可以实现各种功能和需求,比如处理用户请求、数据存储和查询、业务逻辑处理等。下面是一个简单的示例: 首先,我们需要导入Flask库和相关的依赖库: ``` from flask import Flask, request, jsonify ``` 然后,我们创建一个Flask应用程序: ``` app = Flask(__name__) ``` 接下来,我们可以使用装饰器`@app.route()`来定义路由和请求方法,比如处理一个GET请求: ``` @app.route('/api/users', methods=['GET']) def get_users(): # 处理GET请求逻辑 return jsonify({'users': ['user1', 'user2', 'user3']}) ``` 这个例子展示了一个简单的GET请求处理函数,当用户请求`/api/users`时,会返回一个包含用户列表的JSON响应。 除了GET请求,Flask还支持POST、PUT、DELETE等其他请求方法,我们可以使用类似的方式来定义对应的处理函数。 最后,我们需要运行Flask应用程序来启动后端服务: ``` if __name__ == '__main__': app.run() ``` 上述是一个简单的Flask后端示例,实际的应用中会根据具体需求进行不同的处理,比如连接数据库、认证授权、数据校验等。同时,Flask还提供了丰富的扩展和插件,可以更便捷地实现各种功能。 总之,使用Python编写Flask后端可以快速构建可靠、高效的Web服务,满足不同的业务需求。 ### 回答3: Python是一种强大且广泛使用的编程语言,它有许多成熟的框架可以帮助开发人员快速构建各种应用程序。Flask是其中之一,它是一个轻量级的Web应用程序框架,非常适合初学者或小型项目。 使用Python编写一个Flask后端可以带来以下好处: 1. 简单易用:Flask提供简洁的API和灵活的设计模式,使得编写后端逻辑更加直观和易于维护。 2. 快速开发:Python的语法简洁明了,配合Flask框架的扩展,可以快速构建一个功能完善的Web应用程序。 3. 良好的可扩展性:Flask支持各种第三方插件和扩展,可以非常容易地集成其他功能,如数据库连接、缓存、认证等。 4. 丰富的生态系统:Python和Flask都有庞大的生态系统,社区提供了大量的文档、教程和开源项目,开发者可以借鉴和复用这些资源。 编写一个Flask后端的步骤如下: 1. 安装Python和Flask:首先确保在计算机上安装了Python和Flask库,可以通过命令行运行pip install flask来安装。 2. 创建Flask应用:创建一个Python脚本,导入Flask库并初始化一个Flask应用对象。 3. 定义路由和视图函数:使用@app.route装饰器定义URL路由和对应的视图函数,视图函数负责处理请求并返回响应。 4. 处理请求和响应:在视图函数中,可以使用Flask提供的request对象获取请求参数,使用Flask提供的response对象构造响应内容。 5. 启动Flask应用:在脚本的末尾,添加启动应用的代码,通常是app.run()。 6. 测试应用:使用浏览或HTTP客户端工具发送请求,检查应用是否能正确处理并返回响应。 总结来说,使用Python编写Flask后端可以快速创建一个功能完善的Web应用程序,而且还具备良好的可扩展性和丰富的生态系统。无论是初学者还是有经验的开发者,都可以轻松上手并发挥Python和Flask的优势。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hehedadaq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值