Python 3.5(裝飾器)

來源:互聯網
上載者:User

標籤:裝飾器   http   *args   驗證   功能   rgs   pre   簡單   def   

裝飾器

簡單總結

裝飾器的本質:一個閉包函數

裝飾器的功能:在不修改原函數及其調用方式的情況下對原函數功能進行擴充

 

 

簡單裝飾器的實現
def login(func):#等同於login(vv),ff=name    def inner(x):        print("裝飾器的簡單實現")        func(x)  #此時ff等於vv    return inner@login #等同於login(vv)def vv(name):    print("實現裝飾器:%s"%name)#vv => login(vv) => inner  執行login函數,並將 @login 下面的 函數 作為vv函數的參數,即:@login 等價於 login(vv)vv(‘ss‘) #inner(‘ss‘)
裝飾器帶參數的函數 (摘自:http://www.cnblogs.com/Eva-J/articles/7194277.html#_label2)
def timer(func):    def inner(a):        start = time.time()        func(a)        print(time.time() - start)    return inner@timerdef func1(a):    print(a)func1(1)裝飾器——帶參數的裝飾器
裝飾器帶參數的多個函數
import timedef timer(func):    def inner(*args,**kwargs):        start = time.time()        re = func(*args,**kwargs)        print(time.time() - start)        return re    return inner@timer   #==> func1 = timer(func1)def func1(a,b):    print(‘in func1‘)@timer   #==> func2 = timer(func2)def func2(a):    print(‘in func2 and get a:%s‘%(a))    return ‘fun2 over‘func1(‘aaaaaa‘,‘bbbbbb‘)print(func2(‘aaaaaa‘))
可以裝飾具有處理n個參數的函數的裝飾器 
def w1(func):    def inner(*args,**kwargs):        # 驗證1        # 驗證2        # 驗證3        return func(*args,**kwargs)    return inner @w1def f1(arg1,arg2,arg3):    print ‘f1‘

 

一個函數可以被多個裝飾器裝飾嗎?
def w1(func):    def inner(*args,**kwargs):        # 驗證1        # 驗證2        # 驗證3        return func(*args,**kwargs)    return inner def w2(func):    def inner(*args,**kwargs):        # 驗證1        # 驗證2        # 驗證3        return func(*args,**kwargs)    return inner  @w1@w2def f1(arg1,arg2,arg3):    print ‘f1‘

 

Python 3.5(裝飾器)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.