python装饰器
python装饰器本身就是一个函数,它的主要功能就是在不改变原函数的情况下,额外的增加一些功能,提高代码的利用率,它的返回值也是一个函数
1.本质:装饰器是一个函数
2.参数:你需要调用的函数
3.返回值:返回值也是一个函数
4.作用:在不改变原函数的情况下增加额外的功能
python装饰器有很多经典的应用场景,主要是将许多雷同的代码政客起来提高代码的整洁及可阅读性。比如:插入日志、性能测试、事务处理、权限校验等。
如何使用装饰器
添加日志信息,来实现func1(),func2()日志的输出
import logging
def func()
def wapper()
# 返回传入的方法名参数的调用后的日志信息
logging.warning('{}日志信息'.format(func.__name__))
return func
returrn wapper()
@func
def func1():
print('func1')
@func
def func2():
print('func2')
func1()
func2()
输出:WARNING:root:func1函数正在执行
WARNING:root:func2函数正在执行
当然也能传入参数
import logging
def func()
def wapper(*args,**kwargs) #通过*args,**kwargs来传入指定的参数
# 返回传入的方法名参数的调用后的日志信息
logging.warning('{}日志信息'.format(func.__name__))
return func(*args,**kwargs)
returrn wapper()
通过装饰器传参来打印不同的日志信息
import logging
def log(level):
def func():
def wapper():
if level == 'warning':
# 返回传入的方法名参数的调用后的日志信息
logging.warning('{}日志信息'.format(func.__name__))
elif level == 'Debug':
logging.Debug('{}日志信息'.format(func.__name__))
return func
returrn wapper()
@func('warning')
def func1():
print('func1')
@func('Debug')
def func2():
print('func2')
func1()
func2()
输出:WARNING:root:func1函数正在执行
DEBUG:root:func2函数正在执行