'Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解'

Python 泛函編程 編程語言 程序設計 軟件測試開發技術棧 2019-07-28
"
"
Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解

函數是Python內建支持的一種封裝,我們通過把大段代碼拆成函數,通過一層一層的函數調用,就可以把複雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程序設計。函數就是面向過程的程序設計的基本單元。

而函數式編程(請注意多了一個“式”字)——Functional Programming,雖然也可以歸結到面向過程的程序設計,但其思想更接近數學計算。

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

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


高階函數(Higher-order function)

我們以一個具體的實例,來理解下是什麼是高階函數。

變量可以指向函數

下面例子,調用sum函數,打印調用sum函數的返回結果,同時打印sum函數,如下:

"
Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解

函數是Python內建支持的一種封裝,我們通過把大段代碼拆成函數,通過一層一層的函數調用,就可以把複雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程序設計。函數就是面向過程的程序設計的基本單元。

而函數式編程(請注意多了一個“式”字)——Functional Programming,雖然也可以歸結到面向過程的程序設計,但其思想更接近數學計算。

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

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


高階函數(Higher-order function)

我們以一個具體的實例,來理解下是什麼是高階函數。

變量可以指向函數

下面例子,調用sum函數,打印調用sum函數的返回結果,同時打印sum函數,如下:

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解

上面我們將sum(num_list)的結果返回給sum_list,那麼,如果把函數本身賦值給變量呢?,如下,將函數sum賦值給變量fun_sum,打印fun_sum變量可以發現fun_sum變量指向了函數sum。

"
Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解

函數是Python內建支持的一種封裝,我們通過把大段代碼拆成函數,通過一層一層的函數調用,就可以把複雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程序設計。函數就是面向過程的程序設計的基本單元。

而函數式編程(請注意多了一個“式”字)——Functional Programming,雖然也可以歸結到面向過程的程序設計,但其思想更接近數學計算。

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

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


高階函數(Higher-order function)

我們以一個具體的實例,來理解下是什麼是高階函數。

變量可以指向函數

下面例子,調用sum函數,打印調用sum函數的返回結果,同時打印sum函數,如下:

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解

上面我們將sum(num_list)的結果返回給sum_list,那麼,如果把函數本身賦值給變量呢?,如下,將函數sum賦值給變量fun_sum,打印fun_sum變量可以發現fun_sum變量指向了函數sum。

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


函數可以作為變量傳入其他函數

既然變量可以指向函數,那麼函數就可以接收作為參數的其他函數,這種函數就稱之為高階函數。如下,是一個簡單的高階函數示例,將sum函數作為變量傳給add_list()裡的function作為高階函數傳參。然後在add_list()裡還調用了function。

"
Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解

函數是Python內建支持的一種封裝,我們通過把大段代碼拆成函數,通過一層一層的函數調用,就可以把複雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程序設計。函數就是面向過程的程序設計的基本單元。

而函數式編程(請注意多了一個“式”字)——Functional Programming,雖然也可以歸結到面向過程的程序設計,但其思想更接近數學計算。

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

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


高階函數(Higher-order function)

我們以一個具體的實例,來理解下是什麼是高階函數。

變量可以指向函數

下面例子,調用sum函數,打印調用sum函數的返回結果,同時打印sum函數,如下:

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解

上面我們將sum(num_list)的結果返回給sum_list,那麼,如果把函數本身賦值給變量呢?,如下,將函數sum賦值給變量fun_sum,打印fun_sum變量可以發現fun_sum變量指向了函數sum。

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


函數可以作為變量傳入其他函數

既然變量可以指向函數,那麼函數就可以接收作為參數的其他函數,這種函數就稱之為高階函數。如下,是一個簡單的高階函數示例,將sum函數作為變量傳給add_list()裡的function作為高階函數傳參。然後在add_list()裡還調用了function。

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


Python函數式編程中常用的高階函數(內建函數)

map()

Python函數式編程中的map()高階函數,它接收一個函數 function 和一個 list,第一個參數 function 以參數序列中的每一個元素調用 function 函數,返回包含每次 function 函數返回值的新列表。

函數語法

 map(function, iterable, ...)

參數

  • function : 函數
  • iterable : 一個或多個序列

返回

  • Python 2.x 返回列表,Python 3.x 返回迭代器。

示例

"
Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解

函數是Python內建支持的一種封裝,我們通過把大段代碼拆成函數,通過一層一層的函數調用,就可以把複雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程序設計。函數就是面向過程的程序設計的基本單元。

而函數式編程(請注意多了一個“式”字)——Functional Programming,雖然也可以歸結到面向過程的程序設計,但其思想更接近數學計算。

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

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


高階函數(Higher-order function)

我們以一個具體的實例,來理解下是什麼是高階函數。

變量可以指向函數

下面例子,調用sum函數,打印調用sum函數的返回結果,同時打印sum函數,如下:

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解

上面我們將sum(num_list)的結果返回給sum_list,那麼,如果把函數本身賦值給變量呢?,如下,將函數sum賦值給變量fun_sum,打印fun_sum變量可以發現fun_sum變量指向了函數sum。

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


函數可以作為變量傳入其他函數

既然變量可以指向函數,那麼函數就可以接收作為參數的其他函數,這種函數就稱之為高階函數。如下,是一個簡單的高階函數示例,將sum函數作為變量傳給add_list()裡的function作為高階函數傳參。然後在add_list()裡還調用了function。

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


Python函數式編程中常用的高階函數(內建函數)

map()

Python函數式編程中的map()高階函數,它接收一個函數 function 和一個 list,第一個參數 function 以參數序列中的每一個元素調用 function 函數,返回包含每次 function 函數返回值的新列表。

函數語法

 map(function, iterable, ...)

參數

  • function : 函數
  • iterable : 一個或多個序列

返回

  • Python 2.x 返回列表,Python 3.x 返回迭代器。

示例

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


reduce()

reduce() 函數會對參數序列中元素進行累積。

函數將一個數據集合(列表、元組等)中的所有數據進行下列操作:用傳給 reduce 中的函數 function(這個函數必須接收兩個參數)先對集合中的第 1、2 個元素進行操作,得到的結果再與第三個數據用 function 函數運算,最後得到一個結果。

函數語法

 reduce(function, iterable[, initializer])

參數

  • function -- 函數,有兩個參數
  • iterable -- 可迭代對象
  • initializer -- 可選,初始參數

返回

  • 返回函數計算結果。

示例如下,列表元素求乘積:

"
Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解

函數是Python內建支持的一種封裝,我們通過把大段代碼拆成函數,通過一層一層的函數調用,就可以把複雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程序設計。函數就是面向過程的程序設計的基本單元。

而函數式編程(請注意多了一個“式”字)——Functional Programming,雖然也可以歸結到面向過程的程序設計,但其思想更接近數學計算。

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

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


高階函數(Higher-order function)

我們以一個具體的實例,來理解下是什麼是高階函數。

變量可以指向函數

下面例子,調用sum函數,打印調用sum函數的返回結果,同時打印sum函數,如下:

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解

上面我們將sum(num_list)的結果返回給sum_list,那麼,如果把函數本身賦值給變量呢?,如下,將函數sum賦值給變量fun_sum,打印fun_sum變量可以發現fun_sum變量指向了函數sum。

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


函數可以作為變量傳入其他函數

既然變量可以指向函數,那麼函數就可以接收作為參數的其他函數,這種函數就稱之為高階函數。如下,是一個簡單的高階函數示例,將sum函數作為變量傳給add_list()裡的function作為高階函數傳參。然後在add_list()裡還調用了function。

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


Python函數式編程中常用的高階函數(內建函數)

map()

Python函數式編程中的map()高階函數,它接收一個函數 function 和一個 list,第一個參數 function 以參數序列中的每一個元素調用 function 函數,返回包含每次 function 函數返回值的新列表。

函數語法

 map(function, iterable, ...)

參數

  • function : 函數
  • iterable : 一個或多個序列

返回

  • Python 2.x 返回列表,Python 3.x 返回迭代器。

示例

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


reduce()

reduce() 函數會對參數序列中元素進行累積。

函數將一個數據集合(列表、元組等)中的所有數據進行下列操作:用傳給 reduce 中的函數 function(這個函數必須接收兩個參數)先對集合中的第 1、2 個元素進行操作,得到的結果再與第三個數據用 function 函數運算,最後得到一個結果。

函數語法

 reduce(function, iterable[, initializer])

參數

  • function -- 函數,有兩個參數
  • iterable -- 可迭代對象
  • initializer -- 可選,初始參數

返回

  • 返回函數計算結果。

示例如下,列表元素求乘積:

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解

reduce(f, [x1, x2, x3]) 同等於 function(f(x1, x2), x3)


filter()

filter() 函數用於過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表。

該接收兩個參數,第一個為函數,第二個為序列,序列的每個元素作為參數傳遞給函數進行判,然後返回 True 或 False,最後將返回 True 的元素放到新列表中。

函數語法

以下是 filter() 方法的語法:

 filter(function, iterable)

參數

  • function -- 判斷函數。
  • iterable -- 可迭代對象。

返回

  • 返回列表

示例如下,保留list_o 中偶數:

"
Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解

函數是Python內建支持的一種封裝,我們通過把大段代碼拆成函數,通過一層一層的函數調用,就可以把複雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程序設計。函數就是面向過程的程序設計的基本單元。

而函數式編程(請注意多了一個“式”字)——Functional Programming,雖然也可以歸結到面向過程的程序設計,但其思想更接近數學計算。

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

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


高階函數(Higher-order function)

我們以一個具體的實例,來理解下是什麼是高階函數。

變量可以指向函數

下面例子,調用sum函數,打印調用sum函數的返回結果,同時打印sum函數,如下:

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解

上面我們將sum(num_list)的結果返回給sum_list,那麼,如果把函數本身賦值給變量呢?,如下,將函數sum賦值給變量fun_sum,打印fun_sum變量可以發現fun_sum變量指向了函數sum。

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


函數可以作為變量傳入其他函數

既然變量可以指向函數,那麼函數就可以接收作為參數的其他函數,這種函數就稱之為高階函數。如下,是一個簡單的高階函數示例,將sum函數作為變量傳給add_list()裡的function作為高階函數傳參。然後在add_list()裡還調用了function。

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


Python函數式編程中常用的高階函數(內建函數)

map()

Python函數式編程中的map()高階函數,它接收一個函數 function 和一個 list,第一個參數 function 以參數序列中的每一個元素調用 function 函數,返回包含每次 function 函數返回值的新列表。

函數語法

 map(function, iterable, ...)

參數

  • function : 函數
  • iterable : 一個或多個序列

返回

  • Python 2.x 返回列表,Python 3.x 返回迭代器。

示例

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


reduce()

reduce() 函數會對參數序列中元素進行累積。

函數將一個數據集合(列表、元組等)中的所有數據進行下列操作:用傳給 reduce 中的函數 function(這個函數必須接收兩個參數)先對集合中的第 1、2 個元素進行操作,得到的結果再與第三個數據用 function 函數運算,最後得到一個結果。

函數語法

 reduce(function, iterable[, initializer])

參數

  • function -- 函數,有兩個參數
  • iterable -- 可迭代對象
  • initializer -- 可選,初始參數

返回

  • 返回函數計算結果。

示例如下,列表元素求乘積:

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解

reduce(f, [x1, x2, x3]) 同等於 function(f(x1, x2), x3)


filter()

filter() 函數用於過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表。

該接收兩個參數,第一個為函數,第二個為序列,序列的每個元素作為參數傳遞給函數進行判,然後返回 True 或 False,最後將返回 True 的元素放到新列表中。

函數語法

以下是 filter() 方法的語法:

 filter(function, iterable)

參數

  • function -- 判斷函數。
  • iterable -- 可迭代對象。

返回

  • 返回列表

示例如下,保留list_o 中偶數:

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


sorted()

sorted()函數就可以對list進行排序。

函數語法

 sorted(iterable[, cmp[, key[, reverse]]])

參數

  • iterable -- 可迭代對象。
  • cmp -- 比較的函數,這個具有兩個參數,參數的值都是從可迭代對象中取出,此函數必須遵守的規則為,大於則返回1,小於則返回-1,等於則返回0。
  • key -- 主要是用來進行比較的元素,只有一個參數,具體的函數的參數就是取自於可迭代對象中,指定可迭代對象中的一個元素來進行排序。
  • reverse -- 排序規則,reverse = True 降序 , reverse = False 升序(默認)。

返回

  • 返回重新排序的列表。

sorted()函數也是一個高階函數,它還可以接收一個key函數來實現自定義的排序,例如按square返回值大小排序:

"
Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解

函數是Python內建支持的一種封裝,我們通過把大段代碼拆成函數,通過一層一層的函數調用,就可以把複雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程序設計。函數就是面向過程的程序設計的基本單元。

而函數式編程(請注意多了一個“式”字)——Functional Programming,雖然也可以歸結到面向過程的程序設計,但其思想更接近數學計算。

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

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


高階函數(Higher-order function)

我們以一個具體的實例,來理解下是什麼是高階函數。

變量可以指向函數

下面例子,調用sum函數,打印調用sum函數的返回結果,同時打印sum函數,如下:

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解

上面我們將sum(num_list)的結果返回給sum_list,那麼,如果把函數本身賦值給變量呢?,如下,將函數sum賦值給變量fun_sum,打印fun_sum變量可以發現fun_sum變量指向了函數sum。

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


函數可以作為變量傳入其他函數

既然變量可以指向函數,那麼函數就可以接收作為參數的其他函數,這種函數就稱之為高階函數。如下,是一個簡單的高階函數示例,將sum函數作為變量傳給add_list()裡的function作為高階函數傳參。然後在add_list()裡還調用了function。

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


Python函數式編程中常用的高階函數(內建函數)

map()

Python函數式編程中的map()高階函數,它接收一個函數 function 和一個 list,第一個參數 function 以參數序列中的每一個元素調用 function 函數,返回包含每次 function 函數返回值的新列表。

函數語法

 map(function, iterable, ...)

參數

  • function : 函數
  • iterable : 一個或多個序列

返回

  • Python 2.x 返回列表,Python 3.x 返回迭代器。

示例

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


reduce()

reduce() 函數會對參數序列中元素進行累積。

函數將一個數據集合(列表、元組等)中的所有數據進行下列操作:用傳給 reduce 中的函數 function(這個函數必須接收兩個參數)先對集合中的第 1、2 個元素進行操作,得到的結果再與第三個數據用 function 函數運算,最後得到一個結果。

函數語法

 reduce(function, iterable[, initializer])

參數

  • function -- 函數,有兩個參數
  • iterable -- 可迭代對象
  • initializer -- 可選,初始參數

返回

  • 返回函數計算結果。

示例如下,列表元素求乘積:

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解

reduce(f, [x1, x2, x3]) 同等於 function(f(x1, x2), x3)


filter()

filter() 函數用於過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表。

該接收兩個參數,第一個為函數,第二個為序列,序列的每個元素作為參數傳遞給函數進行判,然後返回 True 或 False,最後將返回 True 的元素放到新列表中。

函數語法

以下是 filter() 方法的語法:

 filter(function, iterable)

參數

  • function -- 判斷函數。
  • iterable -- 可迭代對象。

返回

  • 返回列表

示例如下,保留list_o 中偶數:

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


sorted()

sorted()函數就可以對list進行排序。

函數語法

 sorted(iterable[, cmp[, key[, reverse]]])

參數

  • iterable -- 可迭代對象。
  • cmp -- 比較的函數,這個具有兩個參數,參數的值都是從可迭代對象中取出,此函數必須遵守的規則為,大於則返回1,小於則返回-1,等於則返回0。
  • key -- 主要是用來進行比較的元素,只有一個參數,具體的函數的參數就是取自於可迭代對象中,指定可迭代對象中的一個元素來進行排序。
  • reverse -- 排序規則,reverse = True 降序 , reverse = False 升序(默認)。

返回

  • 返回重新排序的列表。

sorted()函數也是一個高階函數,它還可以接收一個key函數來實現自定義的排序,例如按square返回值大小排序:

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


匿名函數 lambda

Python使用lambda關鍵字創造匿名函數。所謂匿名,即不再使用顯式def語句這樣標準的形式定義一個函數。這種語句的目的是由於性能的原因,在調用時繞過函數的棧分配。其語法是:

 lambda [arg1[, arg2, ... argN]]: expression

其中,參數是可選的,如果使用參數的話,參數通常也會在表達式之中出現,冒號前面的x表示函數參數,同時匿名函數有個限制,就是隻能有一個表達式,不需要寫return,返回值就是該表達式的結果。

匿名函數通常被用作高階函數(Higher-order function:參數為函數的函數)的參數,比如,上述介紹的幾個內置高階函數:map(),reduce(),filter(),對應的Python實現樣例如下:

map()函數

"
Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解

函數是Python內建支持的一種封裝,我們通過把大段代碼拆成函數,通過一層一層的函數調用,就可以把複雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程序設計。函數就是面向過程的程序設計的基本單元。

而函數式編程(請注意多了一個“式”字)——Functional Programming,雖然也可以歸結到面向過程的程序設計,但其思想更接近數學計算。

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

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


高階函數(Higher-order function)

我們以一個具體的實例,來理解下是什麼是高階函數。

變量可以指向函數

下面例子,調用sum函數,打印調用sum函數的返回結果,同時打印sum函數,如下:

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解

上面我們將sum(num_list)的結果返回給sum_list,那麼,如果把函數本身賦值給變量呢?,如下,將函數sum賦值給變量fun_sum,打印fun_sum變量可以發現fun_sum變量指向了函數sum。

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


函數可以作為變量傳入其他函數

既然變量可以指向函數,那麼函數就可以接收作為參數的其他函數,這種函數就稱之為高階函數。如下,是一個簡單的高階函數示例,將sum函數作為變量傳給add_list()裡的function作為高階函數傳參。然後在add_list()裡還調用了function。

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


Python函數式編程中常用的高階函數(內建函數)

map()

Python函數式編程中的map()高階函數,它接收一個函數 function 和一個 list,第一個參數 function 以參數序列中的每一個元素調用 function 函數,返回包含每次 function 函數返回值的新列表。

函數語法

 map(function, iterable, ...)

參數

  • function : 函數
  • iterable : 一個或多個序列

返回

  • Python 2.x 返回列表,Python 3.x 返回迭代器。

示例

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


reduce()

reduce() 函數會對參數序列中元素進行累積。

函數將一個數據集合(列表、元組等)中的所有數據進行下列操作:用傳給 reduce 中的函數 function(這個函數必須接收兩個參數)先對集合中的第 1、2 個元素進行操作,得到的結果再與第三個數據用 function 函數運算,最後得到一個結果。

函數語法

 reduce(function, iterable[, initializer])

參數

  • function -- 函數,有兩個參數
  • iterable -- 可迭代對象
  • initializer -- 可選,初始參數

返回

  • 返回函數計算結果。

示例如下,列表元素求乘積:

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解

reduce(f, [x1, x2, x3]) 同等於 function(f(x1, x2), x3)


filter()

filter() 函數用於過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表。

該接收兩個參數,第一個為函數,第二個為序列,序列的每個元素作為參數傳遞給函數進行判,然後返回 True 或 False,最後將返回 True 的元素放到新列表中。

函數語法

以下是 filter() 方法的語法:

 filter(function, iterable)

參數

  • function -- 判斷函數。
  • iterable -- 可迭代對象。

返回

  • 返回列表

示例如下,保留list_o 中偶數:

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


sorted()

sorted()函數就可以對list進行排序。

函數語法

 sorted(iterable[, cmp[, key[, reverse]]])

參數

  • iterable -- 可迭代對象。
  • cmp -- 比較的函數,這個具有兩個參數,參數的值都是從可迭代對象中取出,此函數必須遵守的規則為,大於則返回1,小於則返回-1,等於則返回0。
  • key -- 主要是用來進行比較的元素,只有一個參數,具體的函數的參數就是取自於可迭代對象中,指定可迭代對象中的一個元素來進行排序。
  • reverse -- 排序規則,reverse = True 降序 , reverse = False 升序(默認)。

返回

  • 返回重新排序的列表。

sorted()函數也是一個高階函數,它還可以接收一個key函數來實現自定義的排序,例如按square返回值大小排序:

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


匿名函數 lambda

Python使用lambda關鍵字創造匿名函數。所謂匿名,即不再使用顯式def語句這樣標準的形式定義一個函數。這種語句的目的是由於性能的原因,在調用時繞過函數的棧分配。其語法是:

 lambda [arg1[, arg2, ... argN]]: expression

其中,參數是可選的,如果使用參數的話,參數通常也會在表達式之中出現,冒號前面的x表示函數參數,同時匿名函數有個限制,就是隻能有一個表達式,不需要寫return,返回值就是該表達式的結果。

匿名函數通常被用作高階函數(Higher-order function:參數為函數的函數)的參數,比如,上述介紹的幾個內置高階函數:map(),reduce(),filter(),對應的Python實現樣例如下:

map()函數

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


reduce()函數

"
Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解

函數是Python內建支持的一種封裝,我們通過把大段代碼拆成函數,通過一層一層的函數調用,就可以把複雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程序設計。函數就是面向過程的程序設計的基本單元。

而函數式編程(請注意多了一個“式”字)——Functional Programming,雖然也可以歸結到面向過程的程序設計,但其思想更接近數學計算。

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

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


高階函數(Higher-order function)

我們以一個具體的實例,來理解下是什麼是高階函數。

變量可以指向函數

下面例子,調用sum函數,打印調用sum函數的返回結果,同時打印sum函數,如下:

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解

上面我們將sum(num_list)的結果返回給sum_list,那麼,如果把函數本身賦值給變量呢?,如下,將函數sum賦值給變量fun_sum,打印fun_sum變量可以發現fun_sum變量指向了函數sum。

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


函數可以作為變量傳入其他函數

既然變量可以指向函數,那麼函數就可以接收作為參數的其他函數,這種函數就稱之為高階函數。如下,是一個簡單的高階函數示例,將sum函數作為變量傳給add_list()裡的function作為高階函數傳參。然後在add_list()裡還調用了function。

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


Python函數式編程中常用的高階函數(內建函數)

map()

Python函數式編程中的map()高階函數,它接收一個函數 function 和一個 list,第一個參數 function 以參數序列中的每一個元素調用 function 函數,返回包含每次 function 函數返回值的新列表。

函數語法

 map(function, iterable, ...)

參數

  • function : 函數
  • iterable : 一個或多個序列

返回

  • Python 2.x 返回列表,Python 3.x 返回迭代器。

示例

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


reduce()

reduce() 函數會對參數序列中元素進行累積。

函數將一個數據集合(列表、元組等)中的所有數據進行下列操作:用傳給 reduce 中的函數 function(這個函數必須接收兩個參數)先對集合中的第 1、2 個元素進行操作,得到的結果再與第三個數據用 function 函數運算,最後得到一個結果。

函數語法

 reduce(function, iterable[, initializer])

參數

  • function -- 函數,有兩個參數
  • iterable -- 可迭代對象
  • initializer -- 可選,初始參數

返回

  • 返回函數計算結果。

示例如下,列表元素求乘積:

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解

reduce(f, [x1, x2, x3]) 同等於 function(f(x1, x2), x3)


filter()

filter() 函數用於過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表。

該接收兩個參數,第一個為函數,第二個為序列,序列的每個元素作為參數傳遞給函數進行判,然後返回 True 或 False,最後將返回 True 的元素放到新列表中。

函數語法

以下是 filter() 方法的語法:

 filter(function, iterable)

參數

  • function -- 判斷函數。
  • iterable -- 可迭代對象。

返回

  • 返回列表

示例如下,保留list_o 中偶數:

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


sorted()

sorted()函數就可以對list進行排序。

函數語法

 sorted(iterable[, cmp[, key[, reverse]]])

參數

  • iterable -- 可迭代對象。
  • cmp -- 比較的函數,這個具有兩個參數,參數的值都是從可迭代對象中取出,此函數必須遵守的規則為,大於則返回1,小於則返回-1,等於則返回0。
  • key -- 主要是用來進行比較的元素,只有一個參數,具體的函數的參數就是取自於可迭代對象中,指定可迭代對象中的一個元素來進行排序。
  • reverse -- 排序規則,reverse = True 降序 , reverse = False 升序(默認)。

返回

  • 返回重新排序的列表。

sorted()函數也是一個高階函數,它還可以接收一個key函數來實現自定義的排序,例如按square返回值大小排序:

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


匿名函數 lambda

Python使用lambda關鍵字創造匿名函數。所謂匿名,即不再使用顯式def語句這樣標準的形式定義一個函數。這種語句的目的是由於性能的原因,在調用時繞過函數的棧分配。其語法是:

 lambda [arg1[, arg2, ... argN]]: expression

其中,參數是可選的,如果使用參數的話,參數通常也會在表達式之中出現,冒號前面的x表示函數參數,同時匿名函數有個限制,就是隻能有一個表達式,不需要寫return,返回值就是該表達式的結果。

匿名函數通常被用作高階函數(Higher-order function:參數為函數的函數)的參數,比如,上述介紹的幾個內置高階函數:map(),reduce(),filter(),對應的Python實現樣例如下:

map()函數

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


reduce()函數

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


filter()函數

"
Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解

函數是Python內建支持的一種封裝,我們通過把大段代碼拆成函數,通過一層一層的函數調用,就可以把複雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程序設計。函數就是面向過程的程序設計的基本單元。

而函數式編程(請注意多了一個“式”字)——Functional Programming,雖然也可以歸結到面向過程的程序設計,但其思想更接近數學計算。

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

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


高階函數(Higher-order function)

我們以一個具體的實例,來理解下是什麼是高階函數。

變量可以指向函數

下面例子,調用sum函數,打印調用sum函數的返回結果,同時打印sum函數,如下:

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解

上面我們將sum(num_list)的結果返回給sum_list,那麼,如果把函數本身賦值給變量呢?,如下,將函數sum賦值給變量fun_sum,打印fun_sum變量可以發現fun_sum變量指向了函數sum。

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


函數可以作為變量傳入其他函數

既然變量可以指向函數,那麼函數就可以接收作為參數的其他函數,這種函數就稱之為高階函數。如下,是一個簡單的高階函數示例,將sum函數作為變量傳給add_list()裡的function作為高階函數傳參。然後在add_list()裡還調用了function。

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


Python函數式編程中常用的高階函數(內建函數)

map()

Python函數式編程中的map()高階函數,它接收一個函數 function 和一個 list,第一個參數 function 以參數序列中的每一個元素調用 function 函數,返回包含每次 function 函數返回值的新列表。

函數語法

 map(function, iterable, ...)

參數

  • function : 函數
  • iterable : 一個或多個序列

返回

  • Python 2.x 返回列表,Python 3.x 返回迭代器。

示例

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


reduce()

reduce() 函數會對參數序列中元素進行累積。

函數將一個數據集合(列表、元組等)中的所有數據進行下列操作:用傳給 reduce 中的函數 function(這個函數必須接收兩個參數)先對集合中的第 1、2 個元素進行操作,得到的結果再與第三個數據用 function 函數運算,最後得到一個結果。

函數語法

 reduce(function, iterable[, initializer])

參數

  • function -- 函數,有兩個參數
  • iterable -- 可迭代對象
  • initializer -- 可選,初始參數

返回

  • 返回函數計算結果。

示例如下,列表元素求乘積:

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解

reduce(f, [x1, x2, x3]) 同等於 function(f(x1, x2), x3)


filter()

filter() 函數用於過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表。

該接收兩個參數,第一個為函數,第二個為序列,序列的每個元素作為參數傳遞給函數進行判,然後返回 True 或 False,最後將返回 True 的元素放到新列表中。

函數語法

以下是 filter() 方法的語法:

 filter(function, iterable)

參數

  • function -- 判斷函數。
  • iterable -- 可迭代對象。

返回

  • 返回列表

示例如下,保留list_o 中偶數:

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


sorted()

sorted()函數就可以對list進行排序。

函數語法

 sorted(iterable[, cmp[, key[, reverse]]])

參數

  • iterable -- 可迭代對象。
  • cmp -- 比較的函數,這個具有兩個參數,參數的值都是從可迭代對象中取出,此函數必須遵守的規則為,大於則返回1,小於則返回-1,等於則返回0。
  • key -- 主要是用來進行比較的元素,只有一個參數,具體的函數的參數就是取自於可迭代對象中,指定可迭代對象中的一個元素來進行排序。
  • reverse -- 排序規則,reverse = True 降序 , reverse = False 升序(默認)。

返回

  • 返回重新排序的列表。

sorted()函數也是一個高階函數,它還可以接收一個key函數來實現自定義的排序,例如按square返回值大小排序:

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


匿名函數 lambda

Python使用lambda關鍵字創造匿名函數。所謂匿名,即不再使用顯式def語句這樣標準的形式定義一個函數。這種語句的目的是由於性能的原因,在調用時繞過函數的棧分配。其語法是:

 lambda [arg1[, arg2, ... argN]]: expression

其中,參數是可選的,如果使用參數的話,參數通常也會在表達式之中出現,冒號前面的x表示函數參數,同時匿名函數有個限制,就是隻能有一個表達式,不需要寫return,返回值就是該表達式的結果。

匿名函數通常被用作高階函數(Higher-order function:參數為函數的函數)的參數,比如,上述介紹的幾個內置高階函數:map(),reduce(),filter(),對應的Python實現樣例如下:

map()函數

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


reduce()函數

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


filter()函數

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


sorted()函數

"
Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解

函數是Python內建支持的一種封裝,我們通過把大段代碼拆成函數,通過一層一層的函數調用,就可以把複雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程序設計。函數就是面向過程的程序設計的基本單元。

而函數式編程(請注意多了一個“式”字)——Functional Programming,雖然也可以歸結到面向過程的程序設計,但其思想更接近數學計算。

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

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


高階函數(Higher-order function)

我們以一個具體的實例,來理解下是什麼是高階函數。

變量可以指向函數

下面例子,調用sum函數,打印調用sum函數的返回結果,同時打印sum函數,如下:

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解

上面我們將sum(num_list)的結果返回給sum_list,那麼,如果把函數本身賦值給變量呢?,如下,將函數sum賦值給變量fun_sum,打印fun_sum變量可以發現fun_sum變量指向了函數sum。

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


函數可以作為變量傳入其他函數

既然變量可以指向函數,那麼函數就可以接收作為參數的其他函數,這種函數就稱之為高階函數。如下,是一個簡單的高階函數示例,將sum函數作為變量傳給add_list()裡的function作為高階函數傳參。然後在add_list()裡還調用了function。

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


Python函數式編程中常用的高階函數(內建函數)

map()

Python函數式編程中的map()高階函數,它接收一個函數 function 和一個 list,第一個參數 function 以參數序列中的每一個元素調用 function 函數,返回包含每次 function 函數返回值的新列表。

函數語法

 map(function, iterable, ...)

參數

  • function : 函數
  • iterable : 一個或多個序列

返回

  • Python 2.x 返回列表,Python 3.x 返回迭代器。

示例

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


reduce()

reduce() 函數會對參數序列中元素進行累積。

函數將一個數據集合(列表、元組等)中的所有數據進行下列操作:用傳給 reduce 中的函數 function(這個函數必須接收兩個參數)先對集合中的第 1、2 個元素進行操作,得到的結果再與第三個數據用 function 函數運算,最後得到一個結果。

函數語法

 reduce(function, iterable[, initializer])

參數

  • function -- 函數,有兩個參數
  • iterable -- 可迭代對象
  • initializer -- 可選,初始參數

返回

  • 返回函數計算結果。

示例如下,列表元素求乘積:

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解

reduce(f, [x1, x2, x3]) 同等於 function(f(x1, x2), x3)


filter()

filter() 函數用於過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表。

該接收兩個參數,第一個為函數,第二個為序列,序列的每個元素作為參數傳遞給函數進行判,然後返回 True 或 False,最後將返回 True 的元素放到新列表中。

函數語法

以下是 filter() 方法的語法:

 filter(function, iterable)

參數

  • function -- 判斷函數。
  • iterable -- 可迭代對象。

返回

  • 返回列表

示例如下,保留list_o 中偶數:

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


sorted()

sorted()函數就可以對list進行排序。

函數語法

 sorted(iterable[, cmp[, key[, reverse]]])

參數

  • iterable -- 可迭代對象。
  • cmp -- 比較的函數,這個具有兩個參數,參數的值都是從可迭代對象中取出,此函數必須遵守的規則為,大於則返回1,小於則返回-1,等於則返回0。
  • key -- 主要是用來進行比較的元素,只有一個參數,具體的函數的參數就是取自於可迭代對象中,指定可迭代對象中的一個元素來進行排序。
  • reverse -- 排序規則,reverse = True 降序 , reverse = False 升序(默認)。

返回

  • 返回重新排序的列表。

sorted()函數也是一個高階函數,它還可以接收一個key函數來實現自定義的排序,例如按square返回值大小排序:

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


匿名函數 lambda

Python使用lambda關鍵字創造匿名函數。所謂匿名,即不再使用顯式def語句這樣標準的形式定義一個函數。這種語句的目的是由於性能的原因,在調用時繞過函數的棧分配。其語法是:

 lambda [arg1[, arg2, ... argN]]: expression

其中,參數是可選的,如果使用參數的話,參數通常也會在表達式之中出現,冒號前面的x表示函數參數,同時匿名函數有個限制,就是隻能有一個表達式,不需要寫return,返回值就是該表達式的結果。

匿名函數通常被用作高階函數(Higher-order function:參數為函數的函數)的參數,比如,上述介紹的幾個內置高階函數:map(),reduce(),filter(),對應的Python實現樣例如下:

map()函數

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


reduce()函數

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


filter()函數

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解


sorted()函數

Python 函數式編程——常用高階函數 及 lambda匿名函數 詳解

"

相關推薦

推薦中...