知識點:Python函數式編程——高階函數

知識點:Python函數式編程——高階函數

函數式編程就是一種抽象程度很高的編程範式,純粹的函數式編程語言編寫的函數沒有變量,因此,任意一個函數,只要輸入是確定的,輸出就是確定的,這種純函數我們稱之為沒有副作用。而允許使用變量的程序設計語言,由於函數內部的變量狀態不確定,同樣的輸入,可能得到不同的輸出,因此,這種函數是有副作用的。

函數式編程的一個特點就是,允許把函數本身作為參數傳入另一個函數,還允許返回一個函數!

Python對函數式編程提供部分支持。由於Python允許使用變量,因此,Python不是純函數式編程語言。

高階函數

變量可以指向函數

知識點:Python函數式編程——高階函數

函數名其實就是變量

函數名是什麼?函數名其實就是指向函數的變量,對於abs這個函數,完全可以把函數名看做成為一個變量,

傳入函數

既然變量可以指向函數,函數的參數可以接受變量,那麼一個函數就可以當做另一個函數的變量,這種函數就被稱為高階函數

知識點:Python函數式編程——高階函數
知識點:Python函數式編程——高階函數

下面介紹一個內置的高階函數

map接受兩個參數,一個是Iterable一個是函數。map將傳入的函數依次作用於到序列的每一個元素上,有點想列表生成式,並把結果作為寫的Iterator返回

知識點:Python函數式編程——高階函數

map得到的結果是一個Iterator,所以要用list()函數讓整個序列變成一個list

list不是Iterator因為是[] , generator 是Iterator()

可以使用iter來將Iterable變成Iterator

知識點:Python函數式編程——高階函數

本實例,實驗了str

reduce用法

知識點:Python函數式編程——高階函數

比如對一個序列求和

知識點:Python函數式編程——高階函數
知識點:Python函數式編程——高階函數
知識點:Python函數式編程——高階函數

fliter

filter用於過濾序列,和map類似,filter也接受一個函數和一個序列,和map不同的是,filter把傳入的函數依次作用於每個元素,然後根據返回值是True還是False決定保留還是丟棄該元素

知識點:Python函數式編程——高階函數

filter與reduce和map一樣,反悔的都是Iterator惰性序列,需要用list轉換


關於slice中的切片

知識點:Python函數式編程——高階函數

str[::2]相當於正數開始2個一取,str[::-2]從倒數第一個元素開始,2個一取

Sorted

排序算法

排序也是在程序中經常用到的算法,無論使用冒泡排序還是快速排序,排序的核心是比較兩個元素的大小。

數字我們可以直接比較,但如果是字符串或者是兩個dict

sorted也是一個高階函數,可以用key函數來實現自定義的排序

知識點:Python函數式編程——高階函數

默認情況下,對字符串排序,是按照ASCII的大小比較的,由於’Z’ < ‘a’,結果,大寫字母Z會排在小寫字母a的前面。

這樣,我們給sorted傳入key函數,即可實現忽略大小寫的排序:

知識點:Python函數式編程——高階函數

最後小編為大家準備了6月份新出的python自學視頻教程,共計約200G,免費分享給大家!

2019Python自學教程全新升級為《Python+數據分析+機器學習》,九大階段能力逐級提升,打造技能更全面的全棧工程師。

知識點:Python函數式編程——高階函數
知識點:Python函數式編程——高階函數

以上這些教程小編已經為大家打包準備好了,希望對正在學習的你有所幫助!

請大家轉發本文+關注並私信小編:“資料”,即可免費獲取哦!

相關推薦

推薦中...