Python高階函數總結

來源:互聯網
上載者:User

標籤:lis   接受   class   過程   元素   而且   str   知識點   效果   

***高階函數
知識的1、函數本身可以賦值給變數,即:變數可以指向函數
知識點2、函數名也是變數
知識點3、函數的參數能夠接受別的函數,這種函數為高階函數

如:
def add(x,y,f):
return f(x) + f(y)
Python內建了map()和reduce()
***高階函數map()
map()函數接受兩個參數,1個是函數,一個是序列,把序列的每一個元素按函數的方式進行計算,計算的傳回值即是map()函數的傳回值(一個序列)

map()把運算規則抽象了,除了計算簡單的f(x)=x*x,而且還可以計算複雜的函數,比如map(str,[1,2,3,4,5,6,7,8,9])

***高階函數reduce()
reduce()函數也接受兩個參數(1個是函數,一個是序列),也是把函數作用在序列上(如[x1,x2,x3,x4,x5]),但是該參數函數必須接受2個參數,reduce繼續把結果和下一個序列元素做累積計算,
其效果即是reduce(f,[x1,x2,x3,x4,x5]) = f(f(f(f(x1,x2),x3),x4),x5)
>>> def fn(x,y):
return x*10 + y
>>> reduce(fn,[1,2,3,4,5])
12345

***高階函數filter()
Python內建的filter()函數用於過濾序列
和map()類似,filter()也接收一個函數和一個序列。和map()不同的時,filter()把傳入的函數依次作用於每個元素,然後根據傳回值是True還是False決定保留還是丟棄該元素。

在一個list中,刪掉偶數,只保留奇數,可以這麼寫
def is_odd(n):
return n % 2 == 1

filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15])
# 結果: [1, 5, 9, 15]

用filter()這個高階函數,關鍵在於正確實現一個“篩選”函數

***高階函數sorted()和排序演算法
Python內建的sorted()函數可以對list進行排序

通常規定,對於兩個元素x和y,如果認為x < y,則返回-1,如果認為x == y,則返回0,如果認為x > y,則返回1,這樣,排序演算法就不用關心具體的比較過程,而是根據比較結果直接排序。

另外,sorted()也是一個高階函數,可以接收一個自訂的比較函數實現自訂的排序
如sorted([36, 5, 12, 9, 21], lambda x, y: y - x) 和sorted([36, 5, 12, 9, 21][::-1]


高階函數總結:
1、map\reduce\filter\sorted函數都可以接收一個函數f和一個序列L,區別是:

map函數把序列中的各個元素都按f進行執行,返回一個序列

reduce函數把序列計算前2個的結果,然後用結果繼續後後面的元素組成函數參數進行計算,一直累積計算,直到返回結果,傳回值是一個結果值

filter函數用於過濾序列,自訂過濾規則。返回一個序列

sorted用於排序序列,可以自訂定序。返回一個序列

 

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.