简介:
装饰器(Decorators)是 Python 的一个重要部分。简单地说:他们是修改其他函数的功能的函数。
比如说我们写flask,路由就是用装饰器定义的。如果写权限控制,那么权限控制一般也是由装饰器来实现的。日志记录,一般也可以通过装饰器来实现。
简单说,就是为了给某些函数增加一种或几种功能的做法。
下面举例实现。
一:基本函数
1.源码

from time import sleep
def watch_movie():
print('看电影')
sleep(3)
print('The End')
if __name__ == '__main__':
watch_movie()
2.执行结果
代码很简单,先打印看电影,间隔3秒,打印The End。
二:装饰器原理
1.目标:计算函数运行时间
2.源码

from time import sleep, time
def ceal_time():
before = time()
watch_movie()
after = time()
print('函数运行%s秒' % (after - before))
def watch_movie():
print('看电影')
sleep(3)
print('The End')
if __name__ == '__main__':
ceal_time()
3.执行结果
代码很简单,先打印看电影,间隔3秒,打印The End,然后打印函数运行计时。
4.分析
我们把一个函数放进另一个函数去运行,这就是装饰器的基本工作原理。
三:改造计时函数为通用函数
1.目标:把计算函数运行时间这个功能,适配给不同的函数。
2.源码

from time import sleep, time
def ceal_time(fun):
before = time()
fun()
after = time()
print('函数运行%s秒' % (after - before))
def watch_movie():
print('看电影')
sleep(3)
print('The End')
def play_game():
print('玩游戏')
sleep(3)
print('Game Over')
if __name__ == '__main__':
ceal_time(watch_movie)
ceal_time(play_game)
3.执行结果
