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

你可能感兴趣的:(Python 计算Dome运行时间的装饰器)