*************************高階特性********************
一、*)變量可以指向函數
在python中函數名實質上是指向函數體的内容;
函數本身也可以指派給變量,即:變量可以指向函數。
In [2]: max(12,23)
Out[2]: 23
In [3]: lh = max #函數名其實就是指向函數的變量!
二、*)高階函數
變量可以指向函數,函數的參數能接收變量,那麼一個函數就可以接收另
一個函數作為參數,這種函數就稱之為高階函數。
三、*)内置高階函數
map函數
尋找幫助: help(map)
map(...)
map(function, sequence[, sequence, ...]) -> list
map() 函數接收兩個參數,一個是函數,一個是序列, map 将傳入的函數依
次作用到序列的每個元素,并把結果作為新的 list 傳回。
練習: 把這list清單中的所有數字轉為字元串;([1,2,3]---['1','2','3'])
練習:In [30]: l = '1 2 3 5' 轉為整數
2.reduce函數
尋找幫助 help(reduce)
reduce(...)
reduce(function, sequence[, initial]) -> value
eg:reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates
((((1+2)+3)+4)+5).
對于序列中的每個元素疊代調用function函數;
reduce 把一個函數作用在一個序列[x1, x2, x3...]上,這個函數必須接
收兩個參數,reduce 把結果繼續和序列的下一個元素做累積計算。
3.filter函數
filter(...)
filter(function or None, sequence) -> list, tuple, or string
注意:function函數傳回值為bool類型
filter() 也接收一個函數和一個序列。和 map() 不同的時,
filter() 把傳入的函數依次作用于每個元素,然後根據傳回值是 True
還是 False 決定保留還是丢棄該元素。
練習: 把一個序列中的空字元串删請嘗試用 filter() ;
練習:
- 題目描述:
給定一個正整數,編寫程式計算有多少對質數的和等于輸入的這個正整數,并輸出結果。輸
入值小于1000。
如,輸入為10, 程式應該輸出結果為2。(共有兩對質數的和為10,分别為(5,5),(3,7))
4.sorted函數
sorted(...)
sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
疊代對象 函數 (逆序)
cmp=用于比較的參數,傳回值一定和cmp函數的傳回值對應(1 -1 0);
sorted傳回一個新的對象,可以對任意可疊代的對象進行排序;
li.sort()作用于清單本身;隻能用于清單排序;
• 排序也是在程式中經常用到的算法。 無論使用冒泡排序還是快速
排序,排序的核心是比較兩個元素的大小。
--逆序排序
--忽略大小寫
四、*)匿名函數
lambda 參數名:函數傳回值
參數名:支援可變參數,**kwargs.....
•當我們在傳入函數時,有些時候,不需要顯式地定義函數,直接傳入匿名函數更友善。
•關鍵字 lambda 表示匿名函數,冒号前面的 x 表示函數參數
練習:找出貨物中價格最低的貨物和數量最多貨物。
五、閉包
六、*)裝飾器
•裝飾器就是用來裝飾函數。
• 想要增強原有函數的功能;
• 但不希望修改now()函數的定義;
• 在代碼運作期間動态增加功能的方式;
ATM
2.*記時器
3.萬能記時器
編寫Logger裝飾器,實作被裝飾的函數運作結束後,列印日志資訊;
要求:
日志格式内容:時間 函數名 運作使用時間[x]
被裝飾的函數可以接受任意個參數;
裝飾器可以傳參數,并将裝飾器的參數列印出來;顯示為‘裝飾器所傳參數為:xxx’
本文轉自 huanzi2017 51CTO部落格,原文連結:http://blog.51cto.com/13362895/2060918