python的装饰器有点像C#的扩展方法,python的装饰器是在原函数的基础上在做些逻辑上去,相当于扩展了函数功能,在讲解装饰器之前必须先说说什么是闭包。
闭包也是python中的一个语法,说的简单点就是在函数里面在创建一个函数,先看个栗子
def greet(name):
def inside_func(saysomething):
print(saysomething + " " + name)
return inside_func
g = greet("旺财")
g("hello")
g("你好")
栗子很简单,我们创建了greet函数,并在greet函数内部创建了inside_func函数,注意这里inside函数使用了外部传进来的参数name,并最终返回了inside_func这个函数,这个过程就叫闭包,那闭包有什么好处呢,我们来看调用的过程,这里我们创建一个变量g并调用了greet函数给它赋值,注意这个过程内部函数并没有执行而是直接被返回给了变量g,也就是g相当于对内部函数的引用,这个过程我们已经确定了一个参数“旺财”,然后我们对g进行函数调用,每次传进去不同的参数,我们会看到执行不同的结果,这就是闭包的强大之处,我们在给“旺财”打招呼的时候就不用每次都填入“旺财”参数
好了,明白了闭包我们就来看看一个装饰器的例子
def mydecorate(func):
def inside_func():
print("装饰器的逻辑")
func()
return inside_func
@mydecorate
def show():
print("this is showshow")
show()
这里我们写了个装饰器也是个闭包mydecorate函数,我们需要把这个装饰器用于修饰我们的show函数,做法也很简单,只需要在show函数的上方加上@mydecorate即可,这样我们在调用下show函数看看,是不是发生了变化