python高级用法_装饰器
装饰器
装饰器其实就是一种闭包,其功能就是在不破坏目标函数原有代码和功能的前提下,为目标函数增加新功能
案例
希望给sleep函数,增加一个功能:
- 在调用sleep前输出:我要睡觉了
- 在调用sleep后输出:我起床了
def sleep():
import random
import time
print("睡眠中....")
time.sleep(random.randint(1, 5))
print("我要睡觉了")
sleep()
print("我起床了")
这种方式不够优雅
使用装饰器来实现
装饰器的一般写法(闭包写法)
定义一个闭包函数,在闭包函数内部:
- 执行目标函数
- 并完成功能的添加
def sleep():
import random
import time
print("睡眠中....")
time.sleep(random.randint(1, 5))
def outer(func):
def inner():
print("我要睡觉了")
func()
print("我起床了")
return inner
f = outer(sleep)
f()
装饰器的高级写法
def outer(func):
def inner():
print("我要睡觉了")
func()
print("我起床了")
return inner
@outer
def sleep():
import random
import time
print("睡眠中....")
time.sleep(random.randint(1, 5))
sleep()