装饰器
1.自身不传入参数的装饰器(采用两层函数定义装饰器)
def login(func): def wrapper(*args, **kwargs): print("function name: %s"% func.__name__) return func(*args, **kwargs) return wrapper @login def f(): print("inside decorator!") if __name__ == '__main__': f()
>>>function name: f
>>>inside decorator!
2. 带参数的装饰器(采用两层函数定义装饰器)
def debug(func):
def wrapper(*args, **kwargs): # 指定宇宙无敌参数
print("[DEBUG]: enter {}()".format(func.__name__))
print('Prepare and say...')
return func(*args, **kwargs)
return wrapper # 返回
@debug
def say(something):
print("hello {}!".format(something))
if __name__ == '__main__':
say('this is good')
>>>[DEBUG]: enter say()
>>>Prepare and say...
>>>hello this is good!
3. 自身传入参数的装饰器(采用三层函数定义装饰器)
def login(text): def decorator(func): def wrapper(*args,**kargs): print('%s----%s'%(text, func.__name__)) return func(*args,**kargs) return wrapper return decorator # 等价于 ==> (login(text))(f) ==> 返回 wrapper @login('this is a parameter of decorator') def f(): print('2019-06-13') # 等价于 ==> (login(text))(f)() ==> 调用 wrapper() 并返回 f() f() >>>输出: >>> this is a parameter of decorator----f >>> 2019-06-13
4. 类的装饰器, 等续......

浙公网安备 33010602011771号