何为装饰器?
装饰器就是给某一个函数或某一个程序,再不改变它原程序的基础上添加其他的功能.用于拓展原来函数功能的一种函数,这个函数的特殊之处在于它的返回值也是一个函数,使用python装饰器的好处就是在不用更改原函数的代码前提下给函数增加新的功能。一起来看看下面的小例子:
def one(an): print("进入装饰器") def two(): print("装饰器内部") an() print("装饰器末尾") return two @one def three(): print("我进入装饰器了") three()
上面这个例子,你大可以理解为两个函数结合起来使用。每个人理解的方式不一样,所以大胆想象。one函数就是一个装饰器,我们可以直接把它用@符号引用在three函数上。此外,an()这个可以看作参数,在two函数中位置不同,对应的输出位置就不听,可以放在print("装饰器末尾")后面或者其他位置。这里其实可以理解为将three函数当作变量,引用到one函数中,然后在two函数中用an()进行调用。最后返回一个函数里面的值。得到的结果就是:
进入装饰器 装饰器内部 我进入装饰器了 装饰器末尾
那么我们接下来看看装饰器的传值
# -->>>清安<<<--- def name(age): print("进入装饰器") def first_name(a, b): print(f"名字是:{a}") age(a, b) print(f"年龄是:{b}") return first_name @name def name1(a, b): print("报上年龄") if __name__ == '__main__': name1('清安', 18) # 进入装饰器 # 名字是:清安 # 报上年龄 # 年龄是:18
看这个例子,是不是有点像函数中的位置传参呢。根据上面的小实例,这里理解其实就不难了。接下来看看另一种,传多个参数
# 传多个参数 def name(func): def infomation(*args, **kwargs): print(f"姓名:{args[0]}") print(f"性别:{args[1]}") print(f"年龄:{args[2]}") func(*args, **kwargs) return infomation @name def input(a, b, c): print("展示完毕") if __name__ == '__main__': input('清安', '男', 18) # 姓名:清安 # 性别:男 # 年龄:18 # 展示完毕
这里部分需要说明,就是取值的问题,这里传多个值进去,如果不用args[值]的这种方式,那么得到的就是整个元组了。此外,*args, **kwargs这个看着是不是很眼熟,这里前面章节函数部分有写到哦。可以回头看看来。
后续也会出一些装饰器的用法。及时关注