Python的装饰器有类似继承的功能,但是继承需要引用父类,而有的时候只是需要对函数进行简单的添加一个功能,比如打印运行记录,这个时候函数本身是主体,装饰只是锦上添花。装饰器即起这个锦上添花的作用。
当某一函数需要装饰时,用法如下:
@log()#记录运行状态
a=a()
在这里呢,因为需要记录函数a运行状态,因此使用装饰器,装饰器作用的原理是,log()以函数a为参数,返回一个经过装饰后的函数a,然后继续执行本来需要执行的a函数(主体)。
在python中一切皆对象,因此无论是数值,字符串,还是函数本身,都是可以直接进行赋值,传递的。如果一个函数里还有嵌套的函数,然后以这个嵌套函数为返回值。那么在父函数执行完毕后,得到了一个返回值为嵌套函数,那么如果这个嵌套函数依赖于其之前所在父函数的参数呢?那可怎么办?
解决这个问题的方法称为闭包。在父函数返回嵌套函数时,返回的不仅仅是嵌套函数,还包括父函数里的变量,因此返回的是一个包含了原父类局部变量以及函数的元组。