Python的装饰器是个什么东西呢?个人的理解,装饰器相当于一个嵌套函数,因为函数名只是一个指向函数内存地址的变量,所以可以将函数名传给另一个函数,然后返回一个新的函数名,新的函数中,执行原来函数,获取返回值,并添加新内容,就是Python的装饰器了。以下就是本人写的一个小的装饰器的例子:
#!/usr/bin/env python # coding:utf-8 def outer(func): def inner(*args, **kwargs): print("装饰器前面输出") c = func(*args, **kwargs) print("装饰器后面输出") return c return inner @outer def f1(): print("原函数") f1()
装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志、性能测试、事务处理等。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。
当多个函数有重复代码时可以将此部分代码单独拿出来整理成一个装饰器,然后对每个函数调用该装饰器,这样可以实现代码的复用,而且可以让原来的函数更轻便。还有就是当我们需要为多个已经写好的函数添加一个共同功能,比如检查参数的合法性。我们就可以单独写一个检查合法性的装饰器,然后在每个需要检查参数合法性的函数出调用即可,而不用去每个函数内部修改。