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():
    pass

def 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



程序运行截图:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

姜亚轲

你花钱的样子真帅

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值