import time
def index():
time.sleep(3)
print('from index')
def home():
time.sleep(1)
print('from home')
'''1.直接在调用index函数的前后添加代码'''
start_time = time.time()
index()
end_time = time.time()
print('函数index的执行时间为>>>', end_time - start_time)
import time
def index():
time.sleep(3)
print('from index')
def home():
time.sleep(1)
print('from home')
'''2.index调用的地方较多 代码不可能反复拷贝>>>:相同的代码需要在不同的位置反复执行>>>:函数'''
def get_time():
start_time = time.time()
index()
end_time = time.time()
print('函数index的执行时间为>>>:', end_time - start_time)
get_time()
import time
def index():
time.sleep(3)
print('from index')
def home():
time.sleep(1)
print('from home')
'''3.函数体代码写死了 只能统计index的执行时间 如何才能做到统计更多的函数运行时间 直接传参变换统计的函数'''
def get_time(xxx): #xxx为形参,接收函数名get_time实参传进来的函数
start_time = time.time()
xxx() # 接收index函数名并执行index()函数体内的代码
end_time = time.time()
print('函数的执行时间为>>>:', end_time - start_time)
get_time(index) # 接收index函数名并执行get_time函数体内代码
get_time(home) # 接收home函数名并执行get_time函数体内代码
import time
def index():
time.sleep(3)
print('from index')
def home():
time.sleep(1)
print('from home')
'''4.虽然实现了一定的兼容性 但是并不符合装饰器的特征 第一种传参不写 只能考虑闭包'''
def outer(xxx):
# xxx = index
def get_time():
start_time = time.time()
index()
end_time = time.time()
print('函数的执行时间为>>>:', end_time - start_time)
return get_time()
res = outer(index)
res()
res1 = outer(home)
res1()
import time
def index():
time.sleep(3)
print('from index')
def home():
time.sleep(1)
print('from home')
'''5.调用方式还是不对 如何变形>>>:变量名赋值绑定(******)'''
def outer(xxx): # xxx真正的index函数(指向index函数名绑定的内存地址)
def get_time():
start_time = time.time()
xxx()
end_time = time.time()
print('函数的执行时间为>>>', end_time - start_time)
return get_time
# res = outer(index) #赋值符号的左边是一个变量名 可以随意包括命名
# res()
# res1 = outer(home)
# res1()
index = outer(index) #全局名称空间中的index不再执行原来的index函数而是get_time函数
index()
home=outer(home) # outer(真正的index函数)
home()
import time
'''6.上述装饰器只能装饰无参函数 兼容性太差'''
def func(a): # 全局名称空间中的func变量名绑定的是func的函数体代码
time.sleep(0.1)
print('from func', a)
def func1(a,b):
time.sleep(0.2)
print('from func1', a, b)
def func2():
time.sleep(0.3)
print('from func2')
def outer(xxx):
def get_time(a, b):
start_time = time.time()
xxx(a, b)
end_time =time.time()
print('函数的执行时间为>>>:',end_time - start_time)
return get_time
func1 = outer(func1) #让outer函数的形参xxx绑定func1的函数体代码
#让全局名称空间中的func变量名绑定get_time函数体代码
func1(1, 2)
import time
'''7.被装饰的函数不知道有没有参数及有几个参数 如何兼容'''
def func(a):
time.sleep(0.1)
print('from func', a)
def func1(a,b):
time.sleep(0.2)
print('from func1', a, b)
def outer(xxx):
def get_time(*args, **kwargs): # get_time(1,2,3) args=(1,2,3)
start_time = time.time()
xxx(*args, **kwargs) # xxx(*(1,2,3)) xxx(1,2,3)
end_time =time.time()
print('函数的执行时间为>>>:',end_time - start_time)
return get_time
func = outer(func)
func(123)
func1=outer(func1)
func1(1,2)
import time
'''8. 如果被装饰的函数有返回值'''
def func(a):
time.sleep(0.1)
print('from func', a)
return 'func'
def func1(a,b):
time.sleep(0.2)
print('from func1', a, b)
return 'func1'
def outer(xxx):
def get_time(*args, **kwargs): # 接收形参
start_time = time.time()
res = xxx(*args, **kwargs) #接收实参
end_time =time.time()
print('函数的执行时间为>>>:',end_time - start_time)
return res
return get_time
# func = outer(func)
# res = func(123)
# print(res)
func1 = outer(func1) # 接收func1函数名,并进入到outer函数体内执行代码,并把return 的get_time函数返回并赋值给func1变量名,func1相当于就是get_time函数名。
res = func1(123, 123) # func1(即get_time函数)接收两个实参123,123并把实参带进get_time函数内,从上往下执行,
# 遇到xxx即就是第一行func1函数并去func1执行函数并把123,123带进func1函数体内,最后返回func1返回值,res就接收到func1返回值(func1),最后返回res(func1返回值)返回值。
print(res) # 打印res返回值,即func1的返回值
标签:index,func1,推导,get,time,print,装饰,def
From: https://www.cnblogs.com/wxlxl/p/16782733.html