python装饰器讲解

编程入门 行业动态 更新时间:2024-10-09 01:18:26

<a href=https://www.elefans.com/category/jswz/34/1770869.html style=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装饰器讲解

本文发布于:2024-02-07 02:11:22,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1752181.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:python

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!