这一篇我们来讲讲装饰器的用法
装饰器有什么作用呢,见名知意,装饰用的。如果我们写了一个方法,要为这个方法增加一个功能,那么直接修改这个方法就可以达到目的,但是如果我们要为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
有点绕,动手打打断点就理解了,不好理解的话可以写个更简单的函数,不要穿参数。
网友评论