python筆記--裝飾器

來源:互聯網
上載者:User

標籤:裝飾器

裝飾器                                                                                                         

    裝飾器作用就是為自訂的函數添加功能,高階函數和閉包結合使用就可以形成裝飾器。簡單舉例說明:

#-*- coding:utf-8 -*-#假如我們有多個函數需要執行,但是執行前需要手工確認import sysdef my_print():    print ("this is a test!")def confirm(f):    def inner():        my_confirm=input("是否繼續yes/no:")        if my_confirm == 'yes':            f()        else:            sys.exit()    return innermy_print=confirm(my_print)my_print()

    python支援一種友好的寫法,可以省去再次定義原來的函數:

#-*- coding:utf-8 -*-import sysdef confirm(f):    def inner():        my_confirm=input("是否繼續yes/no:")        if my_confirm == 'yes':            f()        else:            sys.exit()    return inner@confirm    #在需要調用判斷功能的函數前加@def my_print():       print ("this is a test!")my_print()

    如果被裝飾的功能函數有參數,在裝飾器內部也要添加對應的參數,簡單舉例說明:

#-*- coding:utf-8 -*-#裝飾器之功能函數加參數import sysdef confirm(f):    def inner(*x,**y):        my_confirm=input("是否繼續yes/no:")        if my_confirm == 'yes':            f(*x,**y)    #注意f和inner的參數要一一對應        else:            sys.exit()    return inner@confirm    def my_sum(*a,**b):    result=0    for i in a:        result+=i    print(result)my_sum(1,2,3,4,5)

    如果再為裝飾器添加一個功能,並且裝飾器可以傳參,只需要在原有裝飾器外部再添加一層嵌套函數,簡單舉例說明:

#-*- coding:utf-8 -*-import sysdef judge(default=0):    def confirm(f):        def inner(*x,**y):            my_confirm=input("是否繼續yes/no:")            if my_confirm == 'yes':                print(f(*x,**y))                if f(*x,**y) > int(default):                    print('more')                else:                    print('less')            else:                sys.exit()        return inner    return confirm@judge(10)def my_sum(*a,**b):    result=0    for i in a:        result+=i    return(result)    my_sum(1,2,3,4,5)


python筆記--裝飾器

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.