1. 程式人生 > >高階函數編程

高階函數編程

我們 bre 加工 函數式編程 但是 完全 相同 過程 als

高階函數編程:

  高階函數編程是在原有的編程基礎上加以優化,使得代碼在編譯或閱讀的過程中更加的方便。

  不過個人覺得,高階函數編程的使用過程中,首先需要一個人對函數使用和運算方面有很強或很熟練的思維性,至少要熟練使用函數式編程才能更好的去運用高階函數編程。

  高階函數 有三種使用方式:map / filter / sorted

我們以一道題為例(map)

def num(x):

if x%2==0:

return x

print(tuple(map(num(,range(10))))

舉一個簡單的例子來說,這樣大家相對理解起來會更容易一些。

先定義一個函數,設置一個或多形參用來接收實參所傳遞的值,在def函數下設定一個我們自己想要判定條件,用return返回處理後的可叠代對象,傳入map中進行打包叠代(map會將返回值打包叠代生成一個“地址)。當map中的參數不再對map提供數據時,此步驟自動結束。

如圖所示:

                 技術分享圖片

  第1步:我設定了一個用函數內求偶數條件,第2步:用range設置1-10實參傳遞到num函數中的行參x中,使其進行自動判定,第3步:判定成功後將返回值返回到map中,生成一個叠代器。如果直接進行打印的話,打印出來的是一個被叠代的地址,而不是我們想要看的元素,所以我們需要將叠代器裏面的元素用任意一種方式叠代取出。

  在這裏我用的tuple(元組),同時我們還可以list(列表)/set(集合)/next(單個讀取)\for循環依次遍歷叠代。

  其實大家可以簡單的去認為num這個函數就是一個加工廠,將我們送過去的商品進行加工,加工好後再將這個商品封裝好送回來,這個時候我們得到了這個返回的箱子,我們需要用一種工具將這個箱子打開,把裏面的東西拿出來展示給我們看。

  所以得出的結果應該是:

  (0, None, 2, None, 4, None, 6, None, 8, None)

  因為map是返回所有的可叠代對象,所不管是我們函數中判定成立或不成立的值都會被返回。(成立的就會返回達到條件的值,不成立的就返回None)

filter函數

  filter函數的用法基本上和map相同,但是這個函數所返回的可叠代對象是經過篩選的,filter本身是一個篩選的函數,這個函數只會返回為條件為True的可叠代對象,而為False的對象會被filter直接舍棄,並不會返回到我們手中。

sorted函數

  sorted函數是一個排序函數,他是在原來的列表上進行取值,同時生成一個新的對象排序,但是sorted和sort不同的是sorted可以設定指定一種方式去排序,代碼如下:

def a():

L=[]

while True:

n=input("請輸入字符串")

if not n:

break

L.append(n)

return L

s=a()

p=sorted(s,key=len)

print(p)

  使用sorted這個函數使其根據字符串的長度去排序, sorted括號第一個參數填寫我們需要排序的值,而後面有一個key參數,而這個key參數後面輸入的就是我們在排序過程中所使用的條件,判斷字符串的長度要用到ken所以在輸入字符串後讓len去獲取字符串的長度,從而排序。其他的基本和sort使用方法完全相同,在這裏就不再多說了。

---恢復內容結束---

高階函數編程