Python的装饰器(一)

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函数看看,是不是发生了变化

你可能感兴趣的:(Python,Python)