Python--高階函數及其裝飾器

高階函數

函數式編程

• 函數可以認爲是變量, 因此函數名可以作爲參數傳入函數;這樣的函數稱爲高階函數;

 blob.png

內置高階函數

•  map

map(function, sequence[, sequence, ...]) -> list

對sequence序列中的每一個元素item依次執行function(item)函數 操作,最終返回一個

•  列表;

reduce

reduce(function, sequence[, initial]) -> value

對於序列中的每個元素迭代調用function函數;

reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) =====》  (((1+2)+3)+4)+5).

注意的點: function必須要有兩個參數;

•  filter函數

filter(function or None, sequence) -> list, tuple, or string

注意: function函數返回值爲bool類型

•  sorted函數

sorted(iterable, cmp=None, key=None, reverse=False) -->  new sorted list

cmp=用於比較的函數, 返回值一定和cmp函數的返回值對應(1,-1,0);

 

# map/reduce

 blob.png

# li.sort() 作用於列表本身 ; 只能用於列表排序 ;

 blob.png

# sorted 返回一個新的對象 , 可以對任意可迭代的對象進行排序 ;

 blob.png

# sorted 逆序排序

 blob.png

函數作爲形參傳入函數

函數作爲返回值

def fun(a, b): return xx

 blob.png

閉包(closure)

 blob.png

 

裝飾器

- 器,可以理解爲函數;

- 裝飾器實質上是用來裝飾函數的;

- 裝飾器就是在原來功能基礎上加上一些其他功能,即在程序執行前或者執行後- 加上需要的操作;

- 裝飾器的功能,比如:權限的驗證,日誌記錄, 函數運行時間統計, 執行函數前              

 

  預備處理, 執行函數後清理功能等;

- 產品經理, 開發人員之間的愛恨情仇

 blob.png

 blob.png

 

 

• 理解裝飾器的實質(建議在pycharm中debug調試,查看運行過程)

 blob.png

• 裝飾器應用之函數計時器

 blob.png

 blob.png

被裝飾的函數有參數

案例參照上述代碼

• 必選參數

• 默認參數

• 可變參數(注意: 儘量使用,通用性比較強)

• 關鍵字參數

 

裝飾器帶參數

 blob.png

 blob.png

 

裝飾器案例之引入日誌

• 添加裝飾器@myLogger的函數都會記錄日誌

• 日誌格式爲 什麼時間 start 什麼函數 函數參數

• 文件操作學習後的升級: 把日誌信息記錄到文件/var/log/myfun.log中;

 blob.png

 blob.png

 

練習

- 編寫Logger裝飾器,實現被裝飾的函數運行結束後,打印日誌的信息;

- 日誌格式內容爲:時間、函數名、運行時間;

- 被裝飾的函數可以接收任意個參數;

- 裝飾器可以傳參數,並將裝飾器傳的參數打印出來

- 裝飾器顯示爲:“裝飾器所傳參數爲:xxx”

 blob.png

blob.png


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