python学习——装饰器

装饰器本身就是一个函数,装饰器要与被装饰的函数建立连接,需在被装饰函数前加(@函数名)

1.无参装饰器

def outer(fun):

    def wrapper():

        print'前验证'

        fun()

        print'后验证'

    return wrapper

@outer

def fun1():

    print'fun1'

fun1()

输出结果:

前验证

fun1

后验证


定义fun1函数,outer是装饰函数,函数执行到@outer时,@outer = outer(fun1),就是把fun1函数当成参数传给outer函数的fun,然后返回的wrapper函数就是fun1


2.有参装饰器

def outer(fun):

    def wrapper(a):

        print'验证'

        fun(a)

        print'结束'

    return wrapper

 

@outer

def fun1(a):

    print'fun1',a

   

fun1('哈哈哈')

输出结果:

验证

fun1 哈哈哈

结束


3.在原函数上加返回值

def outer(fun):

    def wrapper(a):

        print'验证'

        aaa =fun(a)

        print'结束'

        return aaa

    return wrapper 

@outer

def fun1(a):

    print'fun1',a

    return'原函数返回值'   

result = fun1('哈哈哈')

print result

输出结果:

验证

fun1 哈哈哈

结束

原函数返回值


原函数被装饰器包装成新函数后还能返回原函数的返回值


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章