python装饰器讲解"/>
python装饰器讲解
python装饰器用来扩展原来函数功能,能让函数在不做任何变动的情况下增加某些额外的功能
比如插入日志、性能测试、时间测试等等
装饰器的返回值也是一个函数对象
在了解装饰器之前我们先来了解一下python中的*和**
下面请看代码:
def mul(*args):for value in args:print("args:", value)print(args)print(*args)def mul2(**kw):for key, value in kw.items():print(key + ":" + value)print(kw)print(*kw) if __name__ == '__main__':mul(1,'a',True)print('\n')mul2(name='Tony', age='20', single='True')
程序截图:
看见程序后应该有点意思了吧,*号就像一只手一样,把你要用到的数据抓出来
其实概括性的就两句话:
一个星(*):表示接收的参数作为tuple来处理
两个星(**):表示接收的参数作为dict来处理
接下来看一个没有参数的简易装饰器,让大家了解一下装饰器的功能:
def decorator(func):def wrapper():print('start {}'.format(func.__name__))return wrapper@decorator
def func_a():pass@decorator
def func_b():passdef func_c():pass
func_c = decorator(func_c) # decorator装饰器和这句功能一样
这个装饰器很简单,就是在每个函数运行时都打印start+函数名
再来看每个函数运行截图:
看到func_c函数运行起来和a、b没什么区别
一般的装饰器都得携带或多或少的几个参数,同时加上*args和**kw的话我们就不用担心收到的是个tuple还是dict了
也不管收到的有几个参数,如果tuple和dict混杂起来,得保证tuple的参数在前面
程序如下:
def decorator(func):def wrapper(*args, **kw):print('start {}'.format(func.__name__))return func(*args, **kw)return wrapper@decorator
def func_a(a, b):return a + b@decorator
def func_b(a, b, c):return a + b + c@decorator
def func_c(a=5, b=3):return a - b@decorator
def func_d(a, b=3, c=5):return a - b + c
我给的例子还是比较典型的,一个tuple,一个三个参数的tuple,一个dict,还有一个tuple混dict
程序运行截图:
更多推荐
python装饰器讲解
发布评论