計算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__)+"函數(shù)運行時間為"+str(Run_time))
return ret
return call_func
啰嗦版
# 導入時間模塊
import time
def GetRunTime(func):
def call_func(*args, **kwargs):
# Dome的起始時間
begin_time = time.time()
# 調(diào)用Dome
ret = func(*args, **kwargs)
# Dome的結(jié)束時間
end_time = time.time()
# Dome的運行時間
Run_time = end_time - begin_time
# 將Dome的名字以及Dome的運行時間,打印在終端
print(str(func.__name__)+"函數(shù)運行時間為"+str(Run_time))
# 返回Dome的引用
return ret
# 當函數(shù)被裝飾的時候, 返回裝飾器內(nèi)閉包函數(shù)的引用
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__)+"函數(shù)運行時間為"+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("布爾優(yōu)化冒泡"+str(maopao2(data)))
運行結(jié)果如下:
裝飾器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__)+"函數(shù)運行時間為"+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
# 冒泡布爾優(yōu)化
@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函數(shù)來定義一個list[列表]
data = list(range(1000))
print("洗牌之前的列表"str(data))
# 利用random模塊的shuffle的函數(shù), 將此列表內(nèi)元素的順序打亂,一般都稱為洗牌函數(shù)
random.shuffle(data)
# 將洗牌后的列表打印在終端
print("洗牌之后的列表:" + str(data))
print("標準冒泡"+str(maopao1(data)))
print("布爾優(yōu)化冒泡"+str(maopao2(data)))
運行結(jié)果如下:
裝飾器2.png