栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python之装饰器实践

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python之装饰器实践

有以下函数:

def func_test():
    lists = []
    for i in range(10000000):
        lists.append(i)

想要统计这个函数的调用时长怎么办???

一般解法:

def func_test():
    start_time = time.time()
    lists = []
    for i in range(10000000):
        lists.append(i)
    end_time = time.time()
    run_time = end_time - start_time
    print("函数调用执行时长:"+str(run_time))

这时候又来个函数

def func_test_new():
    lists = []
    for i in range(10000000):
        i *= 2
        lists.append(i)

又要统计函数执行时长。。。这个时候如果再直接修改函数中的代码当然可以达到目的,但是看着就相当不舒服了,相同的代码需要写N次,在这种情况下,python提供了一种解决方案:使用装饰器

以上代码就可以修改为:

import time


def time_diff(func_name):
    # func_name 为 外部传入的函数,注意:不带()
    def wrapper():
        # wrapper 为包装器,实现了需要增强原函数功能的部分
        start_time = time.time()
        print("开始执行的时间:" + str(start_time))
        func_name()  # 调用原函数的位置
        end_time = time.time()
        print("结束执行的时间:" + str(end_time))
        run_time = end_time - start_time
        print("函数执行的时长:" + str(run_time))
        return func_name()  # 包装器执行完,将原函数返回

    return wrapper()  # 将包装器执行结果返回给装饰器


@time_diff
def func_test():
    lists = []
    for i in range(10000000):
        lists.append(i)


@time_diff
def func_test_new():
    lists = []
    for i in range(10000000):
        i *= 2
        lists.append(i)

@time_diff  标识为装饰器的用法

PS:其实Python装饰器和Java中的注解用法类似,但是实现会简单很多,后续会写一篇小论文,用来解释装饰器执行原理,祝大家日进斗金。

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1018555.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号