10.装饰器
10.1 概念
装饰器是Python中的一种函数,它可以让被他装饰的函数在不修改任何代码的情况下添加额外的功能
装饰器的本质是调用函数
def log(func):
def wrapper(*args, **kwargs):
print('this is a log')
return func(*args, **kwargs)
return wrapper
@log
def func():
print("I'm a log")
func()
>>> this is a log
>>> I'm a log
10.2 *args 和 **wargs的用法
def func1(*args):
print(type(args))
print(args)
def func2(**wargs):
print(type(wargs))
print(wargs)
func1(1, 2, 3)
func2(a=1, b=2, c=3)
>>><class 'tuple'>
>>>(1, 2, 3)
>>><class 'dict'>
>>>{'a': 1, 'b': 2, 'c': 3}
10.3 带参数的装饰器
def log(level):
def decorator(func):
def wrapper(*args, **wargs):
if level == "info":
print("I'm info level log")
elif level == "error":
print("I'm error level log")
return wrapper
return decorator
@log(level="error")
def func():
print("I'm a function")
func()
>>> I'm error level log
10.4 类装饰器
类装饰器使用__call__方法
class Log(object):
def __init__(self, func):
self.func = func
def __call__(self, *args, **kwargs):
print("I'm a log")
self.func()
@Log
def func():
print("I'm a function")
func()
>>>I'm a log
>>>I'm a function