天天看點

python-高階函數

*************************高階特性********************

一、*)變量可以指向函數

在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