Python 计算Dome运行时间的装饰器

计算Dome运行时间的装饰器

精简版

import time


def GetRunTime(func):
    def call_func(*args, **kwargs):
        begin_time = time.time()
        ret = func(*args, **kwargs)
        end_time = time.time()
        Run_time = end_time - begin_time
        print(str(func.__name__)+"函数运行时间为"+str(Run_time))
        return ret
    return call_func

啰嗦版

# 导入时间模块
import time


def GetRunTime(func):
    def call_func(*args, **kwargs):
        # Dome的起始时间
        begin_time = time.time()
        # 调用Dome
        ret = func(*args, **kwargs)
        # Dome的结束时间
        end_time = time.time()
        # Dome的运行时间
        Run_time = end_time - begin_time
        # 将Dome的名字以及Dome的运行时间,打印在终端
        print(str(func.__name__)+"函数运行时间为"+str(Run_time))
        # 返回Dome的引用
        return ret
    # 当函数被装饰的时候, 返回装饰器内闭包函数的引用
    return call_func

用两个冒泡排序来演示下此装饰器:

精简版:

import random
import time


def GetRunTime(func):
    def call_func(*args, **kwargs):
        begin_time = time.time()
        ret = func(*args, **kwargs)
        end_time = time.time()
        Run_time = end_time - begin_time
        print(str(func.__name__)+"函数运行时间为"+str(Run_time))
        return ret
    return call_func


@GetRunTime
def maopao1(data):
    for i in range(len(data)-1):
        for j in range(len(data)-i-1):
            if data[j] > data[j+1]:
                data[j], data[j+1] = data[j+1], data[j]
    return data


@GetRunTime
def maopao2(data):
    for i in range(len(data)-1):
        panduan = False
        for j in range(len(data)-i-1):
            if data[j] > data[j+1]:
                data[j], data[j+1] = data[j+1], data[j]
                panduan = True
        if not panduan:
            break
    return data


data = list(range(1000))
random.shuffle(data)
print("标准冒泡"+str(maopao1(data)))
print("布尔优化冒泡"+str(maopao2(data)))
运行结果如下:
装饰器1.png

啰嗦版:

import random
import time

# 先定义一个计算Demo运行时间的装饰器
def GetRunTime(func):
    def call_func(*args, **kwargs):
        begin_time = time.time()
        ret = func(*args, **kwargs)
        end_time = time.time()
        Run_time = end_time - begin_time
        print(str(func.__name__)+"函数运行时间为"+str(Run_time))
        return ret
    return call_func

# 冒泡标准排序
@GetRunTime
def maopao1(data):
    for i in range(len(data)-1):
        for j in range(len(data)-i-1):
            if data[j] > data[j+1]:
                data[j], data[j+1] = data[j+1], data[j]
    return data


# 冒泡布尔优化
@GetRunTime
def maopao2(data):
    for i in range(len(data)-1):
        panduan = False
        for j in range(len(data)-i-1):
            if data[j] > data[j+1]:
                data[j], data[j+1] = data[j+1], data[j]
                panduan = True
        if not panduan:
            break
    return data

# 利用range函数来定义一个list[列表]
data = list(range(1000))
print("洗牌之前的列表"str(data))
# 利用random模块的shuffle的函数, 将此列表内元素的顺序打乱,一般都称为洗牌函数
random.shuffle(data)
# 将洗牌后的列表打印在终端
print("洗牌之后的列表:" + str(data))
print("标准冒泡"+str(maopao1(data)))
print("布尔优化冒泡"+str(maopao2(data)))
运行结果如下:
装饰器2.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,846评论 25 708
  • 1 场景问题# 1.1 复杂的奖金计算## 考虑这样一个实际应用:就是如何实现灵活的奖金计算。 奖金计算是相对复杂...
    七寸知架构阅读 4,045评论 4 67
  • 排序的基本概念 在计算机程序开发过程中,经常需要一组数据元素(或记录)按某个关键字进行排序,排序完成的序列可用于快...
    Jack921阅读 1,458评论 1 4
  • 北方的冬季虽然阳光照在脸颊上,但是寒风一点也没有心疼你的意思,使劲地吹着不经风霜的我,我低着头一边走一边嘲笑...
    candy小雅阅读 159评论 0 0
  • 没人能一手把你拽到天堂,也没人能一脚把你踩到地狱,命运中所谓痛苦与快乐,只是内心感受,当你超越自己的狭隘和自私时,...
    张伟kk阅读 160评论 0 0