Python成長之路【第五篇】:Python基礎之裝飾器

來源:互聯網
上載者:User

標籤:code   one   接收   pre   src   成長   imp   圖片   imm   

一、什麼是裝飾器

裝飾:裝飾既修飾,意指為其他函數添加新功能

器:器既函數

裝飾器定義:本質就是函數,功能是為其他函數添加新功能

二、裝飾器需要遵循的原則

1、不能修改裝飾器的原始碼(開放封閉原則)

2、為裝飾器函數添加新功能後,不能修改函數的調用方式

三、實現裝飾器的知識儲備

裝飾器 = 高階函數 + 函數嵌套 + 閉包

四、高階函數 高階函數的定義:

1、函數接收的參數是一個函數名

2、函數的傳回值是一個函數名

3、滿足上述條件任意一個,都可以稱為之高階函數

 1 def foo(): 2     print(‘我的函數名作為參數傳給高階函數‘) 3 def gao_jie1(func): 4     print(‘我就是高階函數1,我接收的參數名是%s‘ %func) 5     func() 6  7 def gao_jie2(func): 8     print(‘我就是高階函數2,我的傳回值是%s‘ %func) 9     return func10 11 gao_jie1(foo)12 gao_jie2(foo)
高階函數示範
 1 #高階函數應用1:把函數名當做參數傳給高階函數 2 import time 3 def foo(): 4     print(‘from the foo‘) 5  6 def timmer(func): 7     start_time=time.time() 8     func() 9     stop_time=time.time()10     print(‘函數%s 已耗用時間是%s‘ %(func,stop_time-start_time))11 timmer(foo)12 #總結:我們確實為函數foo增加了foo已耗用時間的功能,但是foo原來的執行方式是foo(),現在我們需要調用高階函數timmer(foo),改變了函數的調用方式
把函數名當做參數傳給高階函數
 1 #高階函數應用2:把函數名當做參數傳給高階函數,高階函數直接返回函數名 2 import time 3 def foo(): 4     print(‘from the foo‘) 5  6 def timmer(func): 7     start_time=time.time() 8     return func 9     stop_time=time.time()10     print(‘函數%s 已耗用時間是%s‘ %(func,stop_time-start_time))11 foo=timmer(foo)12 foo()13 #總結:我們確實沒有改變foo的調用方式,但是我們也沒有為foo增加任何新功能
函數傳回值是函數名

 

高階函數總結:

1、函數接收的參數是一個函數名

  作用:在不修改函數原始碼的前提下,為函數添加新功能

  不足:會改變函數的調用方式

2、函數的傳回值是一個函數名

  作用:不修改函數的調用方式

  不足:不能添加新功能

 五、函數嵌套
def foo(name):    print("from foo %s" %name)    def ret():        print("from ret")        def bar():            print("from bar")        bar()    ret()    foo("Albert")

  

Python成長之路【第五篇】: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.