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 哈哈哈

結束

原函數返回值


原函數被裝飾器包裝成新函數後還能返回原函數的返回值


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