Python 装饰器

617 查看

通过前面的学习,我们知道可以把函数复制给变量,通过该变量调用函数。

函数对象中有一属性为__name__,通过funName.__name__可以获取函数的名字。


通过__name__属性获取函数名

当我们需要给某些函数运行期间动态的添加某些功能时,则需要涉及装饰器,即“Decoeator”,它可以增强函数的功能,它的定义有点复杂,但是使用起来却非常的灵活与方便。其主要是对函数其修饰作用,它可以让我们在不修改原函数的基础上,在执行函数的前后执行别的代码。

装饰器的定义:

我们先定义一个函数,函数里镶嵌另一个函数,里层函数返回的是外层函数的的参数,外层函数返回的是里层函数。

下面的两个例子是有在错误中发现的,一个返回的是外层函数的参数名,另一个返回了参数执行后的结果。

要使一普通函数变为一个装饰器,则需在刚才所定义的外层函数前加@(即@decorator),然后再定义其里层函数的具体内容。

当我们调用其里层函数时,不仅会输出其函数内容,还会输出我们前面定义

print 'call %s()' %func.__name__,即再其执行结果前会打印没成为装饰器前定义的输出。即call name(),且date()中是可以接收任何参数的。


没注意返回了函数名



返回了执行函数后的结果

带参数的装饰器

从上面的例子可以知道,我们在调用date()的时候,不仅执行了date()函数,同意也执行了decorator函数,且时间上先于date(),即对date()起修饰作用.


输出函数对象名

从输出的函数名中,我们知道定义成为装饰器后,函数名date变为了fun,即前面定义decorator函数时,返回的函数。