什么是装饰器?
装饰器可以看作函数的一个修饰,在不更改原来函数功能的前提下拓展函数的功能。
看一个代码:
import time
def decorator(funct):
def inner():
print("What time is it now?")
funct()
return inner
def getTime():
print("The time is " + time.strftime("%H:%M:%S"))
getTime = decorator(getTime)
getTime()
执行结果为:
What time is it now?
The time is 17:56:42
***Repl Closed***
这里通过函数 decorator
修饰函数 getTime
,decorator 内部定义了一个 inner(),decorator 的返回值为 inner。decorator
的功能即为在执行 getTime 之前增加一个输出提示!
Python给提供了一个装饰函数更加简单的写法:
def decorator(funct):
def inner(param1, param2):
# xxx
funct(param1, param2)
# xxx
return inner
@decorator
def funct():
pass
如通过装饰器测量一个函数执行的时间:
import time
def decorator(funct):
def inner(n):
begin = time.time()
funct(n)
end = time.time()
result = end - begin
print(f'Duration is {result} ms')
return inner
@decorator
def run(n):
while n > 0:
n = n - 1
run(10000000)
测试结果如下:
Duration is 0.3730003833770752 ms
***Repl Closed***
END