装饰器有很多经典的使用场景,比如插入日志、性能测试、事务处理等等。借助装饰器,可以将大量函数中与自身功能无关的相似代码抽取出来,从而达到代码复用的目的。下面举个小栗子简单说明一下装饰器的使用方法#定义四个函数计算两次算术运算的结果defnumber01(a,b):returna+bdefnumber02(a,b):returna-bdefnumber03(a,b):returna*bdefnumber04(a,b):returna/b写完后发现传入的参数不一定都是数字,所以需要判断传入参数def的数据类型number01(a,b):ifaisintandbisint:returna+breturn'isnonumber'如果装饰器不适用,一般像上面加一个if判断,所以需要在四个中加入同时对函数进行判断语句增加了代码的重复率,如果有四个以上的函数,会增加工作量。让我们用装饰器重新规划一下代码#首先,你需要定义一个高阶函数,它使用一个函数作为参数。装饰器使用的高阶函数必须先于使用该装饰器的函数声明#说明一下这个函数,函数内部还声明了一个返回函数,返回函数中有一个判断语句判断两者是否ab的值是数字。#如果是数字,返回ab的两个值作为传入函数sun的参数(返回这个函数就是执行这个Function)#如果不是数字,返回一个提示字符串,终止函数运行defjudge_number(sun):defis_number(a,b)ifaisintandbisint:returnsun(a,b)else:return'isnonumber'returnis_number#使用@语法表示函数中的下一行作为参数传递给装饰器函数。这篇文章中就是@judge_numberdefnumber01(a,b):在judge_number函数中returna+b。使用装饰器的方法对原来的代码几乎没有变化
