python装饰器的用法

这一篇我们来讲讲装饰器的用法

装饰器有什么作用呢,见名知意,装饰用的。如果我们写了一个方法,要为这个方法增加一个功能,那么直接修改这个方法就可以达到目的,但是如果我们要为10个方法增加一个相同的功能的,总不能重写这10个方法吧,所以这个时候就可以使用装饰器了。装饰器的另一个优点是在不改变原有代码的情况下扩展功能,也就避免了因为改动代码造成的一系列问题。下面上代码:

定义一个方法test001,输出最大值

方法test_001

写一个装饰器,功能是 输出“最大值是:”这句话

装饰器

使用装饰器,查看最终结果:

使用装饰器

查看输出结果:最大值是:\n5

很明显在执行test_001之前先执行了一个输出语句,任何方法使用这个装饰器都会先执行一个输出语句

下面我们换个方法实现同样的效果:

不适用装饰器

这里我们没有使用装饰器,而是把test_001函数作为参数传递给了test_one,得到的结果与使用装饰器是一样的

来看一下执行步骤:

执行步骤

解析一下步骤:

步骤一:执行步骤一,将test_001作为参数传给test_one

步骤二:执行test_one函数 返回test_two,也就是说:这时将test_two赋值给test_001

步骤三:执行步骤三,其实这时的test_001(3,5)函数就是test_two(3,5)函数

步骤四:执行test_two(3,5)函数,输出print(“最大值是:”),return结果为传给test_one的参数func(这个参数是步骤一中传递的test_001),所以执行函数test_001(),(*args, **kw)是test_two的参数(3,5),return func(*args, **kw)也就是return func(3,5) ,也就是test_001(3,5)

步骤五:步骤四中传递了参数(3,5),所以比较结果是5 

有点绕,动手打打断点就理解了,不好理解的话可以写个更简单的函数,不要穿参数。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容