计算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)))
运行结果如下:
啰嗦版:
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)))
运行结果如下: