010_装饰器
Posted eternity-twinkle
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了010_装饰器相关的知识,希望对你有一定的参考价值。
1,时间
import time
print(time.time()) #获取当前时间
time.sleep(10) #让程序在执行到这个位置的时候停一会儿
1.1,计算程序运行时间
import time
def func():
start = time.time()
print(‘计算时间‘)
time.sleep(0.01)
end = time.time()
print(end-start)
func()
1.2,计算程序运行时间优化
import time
def timmer(f):
start = time.time()
f()
end = time.time()
print(end - start)
def func():
time.sleep(0.01)
print(‘计算时间‘)
timmer(func)
2,不想修改函数的调用方式,但还想在原来的函数前后添加功能
timmer()就是一个装饰器函数,只是对一个函数,有一些装饰作用
import time
def func(): #被装饰函数
time.sleep(0.01)
print(‘计算时间‘)
def timmer(f): #装饰器函数
def inner():
start = time.time()
f() #被装饰函数
end = time.time()
print(end - start)
return inner
func = timmer(func)
func()
3,@装饰符的使用
import time
def timmer(f): #装饰器函数
def inner():
start = time.time()
f() #被装饰函数
end = time.time()
print(end - start)
return inner
@timmer #这个相当于func = timmer(func)这个语句
def func(): #被装饰函数
time.sleep(0.01)
print(‘计算时间‘)
#func = timmer(func)
func()
装饰器函数是一个闭包,因为参数f是函数timmer的变量,所以inner函数是调用的了外部函数的变量,
因为f是外部函数的变量,根据闭包特性,f得到传参后就会一直是代表传来的参数
4,装饰器的执行
5,装饰带参数函数的装饰器
import time
def timmer(f): #装饰器函数
def inner(a):
start = time.time()
ret = f(a) #被装饰函数
end = time.time()
print(end - start)
return ret
return inner
@timmer
def func(a): #被装饰函数
time.sleep(0.01)
print(‘计算时间‘)
return ‘返回值‘
#func = timmer(func)
ret = func(1)
print(ret)
以上是关于010_装饰器的主要内容,如果未能解决你的问题,请参考以下文章