1. 程式人生 > >python入門(六)裝飾器的理解

python入門(六)裝飾器的理解

裝飾器

裝飾器用於拓展原有函數功能的一種函數
比如:

def helloWorld(fun)
        def out()
                print ("======start========")
                fun()
                print ("=====end======")
        return out

@helloWorld
def back ()
        print ("let‘s go")

back()

運行結果:

======start========
let‘s go
=====end======

技術分享圖片@符號是裝飾器的語法糖,在定義函數的時候使用,避免再一次賦值操作

br/>@符號是裝飾器的語法糖,在定義函數的時候使用,避免再一次賦值操作
運行步驟def back()→return out →def out()
帶參數的裝飾器:

def helloWorld(arg):
        def out(fun):
                def go():
                        print ("======start========")
                        fun()
                        print ("=====end======")
                return go       
        return out

@helloWorld("will‘)
def back ():
        print ("let‘s go")

back()

運行結果:

======start========
let‘s go
=====end======

看到裝飾器自帶一個參數傳入,那麽運行過程中這個參數會代入運行,整體的運行過程
技術分享圖片

當函數也帶參數參與:

def logging(taskname):

    def wrapper(func):

        def retu(*args, **wkargs):
            # 函數通過裝飾起參數給裝飾器傳送參數
            print (‘before task‘,taskname)
            # 裝飾器傳變量給函數
            taskid = 1
            summer, funcres = func(taskid, *args, **wkargs)
            print (‘after task‘, taskid, summer)

        return retu
    return wrapper

@logging("test")
def testd(taskid):
    print ("testd runing",taskid)
    return "task summer success eg",[]

testd()

運行結果和步驟:
技術分享圖片

python入門(六)裝飾器的理解