调用包:
from functools import wraps
装饰器其实就是一个函数:参数是一个函数,返回值是一个函数
1.装饰器使用是通过@符号,在函数的上面
2.装饰器中定义的函数,要使用*args,**kwargs两对兄弟组合,并且在这个函数中执行原始函数的
时候也要把*args,**kwargs传进去
3.需要使用functools.wraps在装饰器的函数上,把传进来的函数进行包裹,这个不会丢失原始函数
的__name__等属性
def my_log(func):
@wraps(func)
def wrapper(*args,**kwargs):
print‘hello world‘
func(*args,**kwargs)
return wrapper
@my_log
def run():
print‘run‘