函數是Python內建支持的一種封裝,我們通過把大段代碼拆成函數,通過一層一層的函數調用,就可以把複雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程序設計。函數就是面向過程的程序設計的基本單元。
而函數式編程(請注意多了一個“式”字)——Functional Programming,雖然也可以歸結到面向過程的程序設計,但其思想更接近數學計算。
函數式編程就是一種抽象程度很高的編程範式,純粹的函數式編程語言編寫的函數沒有變量,因此,任意一個函數,只要輸入是確定的,輸出就是確定的,這種純函數我們稱之為沒有副作用。而允許使用變量的程序設計語言,由於函數內部的變量狀態不確定,同樣的輸入,可能得到不同的輸出,因此,這種函數是有副作用的。
Python對函數式編程提供部分支持。由於Python允許使用變量,因此,Python不是純函數式編程語言。
高階函數(Higher-order function)
我們以一個具體的實例,來理解下是什麼是高階函數。
變量可以指向函數
下面例子,調用sum函數,打印調用sum函數的返回結果,同時打印sum函數,如下:
函數是Python內建支持的一種封裝,我們通過把大段代碼拆成函數,通過一層一層的函數調用,就可以把複雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程序設計。函數就是面向過程的程序設計的基本單元。
而函數式編程(請注意多了一個“式”字)——Functional Programming,雖然也可以歸結到面向過程的程序設計,但其思想更接近數學計算。
函數式編程就是一種抽象程度很高的編程範式,純粹的函數式編程語言編寫的函數沒有變量,因此,任意一個函數,只要輸入是確定的,輸出就是確定的,這種純函數我們稱之為沒有副作用。而允許使用變量的程序設計語言,由於函數內部的變量狀態不確定,同樣的輸入,可能得到不同的輸出,因此,這種函數是有副作用的。
Python對函數式編程提供部分支持。由於Python允許使用變量,因此,Python不是純函數式編程語言。
高階函數(Higher-order function)
我們以一個具體的實例,來理解下是什麼是高階函數。
變量可以指向函數
下面例子,調用sum函數,打印調用sum函數的返回結果,同時打印sum函數,如下:
上面我們將sum(num_list)的結果返回給sum_list,那麼,如果把函數本身賦值給變量呢?,如下,將函數sum賦值給變量fun_sum,打印fun_sum變量可以發現fun_sum變量指向了函數sum。
函數是Python內建支持的一種封裝,我們通過把大段代碼拆成函數,通過一層一層的函數調用,就可以把複雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程序設計。函數就是面向過程的程序設計的基本單元。
而函數式編程(請注意多了一個“式”字)——Functional Programming,雖然也可以歸結到面向過程的程序設計,但其思想更接近數學計算。
函數式編程就是一種抽象程度很高的編程範式,純粹的函數式編程語言編寫的函數沒有變量,因此,任意一個函數,只要輸入是確定的,輸出就是確定的,這種純函數我們稱之為沒有副作用。而允許使用變量的程序設計語言,由於函數內部的變量狀態不確定,同樣的輸入,可能得到不同的輸出,因此,這種函數是有副作用的。
Python對函數式編程提供部分支持。由於Python允許使用變量,因此,Python不是純函數式編程語言。
高階函數(Higher-order function)
我們以一個具體的實例,來理解下是什麼是高階函數。
變量可以指向函數
下面例子,調用sum函數,打印調用sum函數的返回結果,同時打印sum函數,如下:
上面我們將sum(num_list)的結果返回給sum_list,那麼,如果把函數本身賦值給變量呢?,如下,將函數sum賦值給變量fun_sum,打印fun_sum變量可以發現fun_sum變量指向了函數sum。
函數可以作為變量傳入其他函數
既然變量可以指向函數,那麼函數就可以接收作為參數的其他函數,這種函數就稱之為高階函數。如下,是一個簡單的高階函數示例,將sum函數作為變量傳給add_list()裡的function作為高階函數傳參。然後在add_list()裡還調用了function。
函數是Python內建支持的一種封裝,我們通過把大段代碼拆成函數,通過一層一層的函數調用,就可以把複雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程序設計。函數就是面向過程的程序設計的基本單元。
而函數式編程(請注意多了一個“式”字)——Functional Programming,雖然也可以歸結到面向過程的程序設計,但其思想更接近數學計算。
函數式編程就是一種抽象程度很高的編程範式,純粹的函數式編程語言編寫的函數沒有變量,因此,任意一個函數,只要輸入是確定的,輸出就是確定的,這種純函數我們稱之為沒有副作用。而允許使用變量的程序設計語言,由於函數內部的變量狀態不確定,同樣的輸入,可能得到不同的輸出,因此,這種函數是有副作用的。
Python對函數式編程提供部分支持。由於Python允許使用變量,因此,Python不是純函數式編程語言。
高階函數(Higher-order function)
我們以一個具體的實例,來理解下是什麼是高階函數。
變量可以指向函數
下面例子,調用sum函數,打印調用sum函數的返回結果,同時打印sum函數,如下:
上面我們將sum(num_list)的結果返回給sum_list,那麼,如果把函數本身賦值給變量呢?,如下,將函數sum賦值給變量fun_sum,打印fun_sum變量可以發現fun_sum變量指向了函數sum。
函數可以作為變量傳入其他函數
既然變量可以指向函數,那麼函數就可以接收作為參數的其他函數,這種函數就稱之為高階函數。如下,是一個簡單的高階函數示例,將sum函數作為變量傳給add_list()裡的function作為高階函數傳參。然後在add_list()裡還調用了function。
Python函數式編程中常用的高階函數(內建函數)
map()
Python函數式編程中的map()高階函數,它接收一個函數 function 和一個 list,第一個參數 function 以參數序列中的每一個元素調用 function 函數,返回包含每次 function 函數返回值的新列表。
函數語法
map(function, iterable, ...)
參數
- function : 函數
- iterable : 一個或多個序列
返回
- Python 2.x 返回列表,Python 3.x 返回迭代器。
示例
函數是Python內建支持的一種封裝,我們通過把大段代碼拆成函數,通過一層一層的函數調用,就可以把複雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程序設計。函數就是面向過程的程序設計的基本單元。
而函數式編程(請注意多了一個“式”字)——Functional Programming,雖然也可以歸結到面向過程的程序設計,但其思想更接近數學計算。
函數式編程就是一種抽象程度很高的編程範式,純粹的函數式編程語言編寫的函數沒有變量,因此,任意一個函數,只要輸入是確定的,輸出就是確定的,這種純函數我們稱之為沒有副作用。而允許使用變量的程序設計語言,由於函數內部的變量狀態不確定,同樣的輸入,可能得到不同的輸出,因此,這種函數是有副作用的。
Python對函數式編程提供部分支持。由於Python允許使用變量,因此,Python不是純函數式編程語言。
高階函數(Higher-order function)
我們以一個具體的實例,來理解下是什麼是高階函數。
變量可以指向函數
下面例子,調用sum函數,打印調用sum函數的返回結果,同時打印sum函數,如下:
上面我們將sum(num_list)的結果返回給sum_list,那麼,如果把函數本身賦值給變量呢?,如下,將函數sum賦值給變量fun_sum,打印fun_sum變量可以發現fun_sum變量指向了函數sum。
函數可以作為變量傳入其他函數
既然變量可以指向函數,那麼函數就可以接收作為參數的其他函數,這種函數就稱之為高階函數。如下,是一個簡單的高階函數示例,將sum函數作為變量傳給add_list()裡的function作為高階函數傳參。然後在add_list()裡還調用了function。
Python函數式編程中常用的高階函數(內建函數)
map()
Python函數式編程中的map()高階函數,它接收一個函數 function 和一個 list,第一個參數 function 以參數序列中的每一個元素調用 function 函數,返回包含每次 function 函數返回值的新列表。
函數語法
map(function, iterable, ...)
參數
- function : 函數
- iterable : 一個或多個序列
返回
- Python 2.x 返回列表,Python 3.x 返回迭代器。
示例
reduce()
reduce() 函數會對參數序列中元素進行累積。
函數將一個數據集合(列表、元組等)中的所有數據進行下列操作:用傳給 reduce 中的函數 function(這個函數必須接收兩個參數)先對集合中的第 1、2 個元素進行操作,得到的結果再與第三個數據用 function 函數運算,最後得到一個結果。
函數語法
reduce(function, iterable[, initializer])
參數
- function -- 函數,有兩個參數
- iterable -- 可迭代對象
- initializer -- 可選,初始參數
返回
- 返回函數計算結果。
示例如下,列表元素求乘積:
函數是Python內建支持的一種封裝,我們通過把大段代碼拆成函數,通過一層一層的函數調用,就可以把複雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程序設計。函數就是面向過程的程序設計的基本單元。
而函數式編程(請注意多了一個“式”字)——Functional Programming,雖然也可以歸結到面向過程的程序設計,但其思想更接近數學計算。
函數式編程就是一種抽象程度很高的編程範式,純粹的函數式編程語言編寫的函數沒有變量,因此,任意一個函數,只要輸入是確定的,輸出就是確定的,這種純函數我們稱之為沒有副作用。而允許使用變量的程序設計語言,由於函數內部的變量狀態不確定,同樣的輸入,可能得到不同的輸出,因此,這種函數是有副作用的。
Python對函數式編程提供部分支持。由於Python允許使用變量,因此,Python不是純函數式編程語言。
高階函數(Higher-order function)
我們以一個具體的實例,來理解下是什麼是高階函數。
變量可以指向函數
下面例子,調用sum函數,打印調用sum函數的返回結果,同時打印sum函數,如下:
上面我們將sum(num_list)的結果返回給sum_list,那麼,如果把函數本身賦值給變量呢?,如下,將函數sum賦值給變量fun_sum,打印fun_sum變量可以發現fun_sum變量指向了函數sum。
函數可以作為變量傳入其他函數
既然變量可以指向函數,那麼函數就可以接收作為參數的其他函數,這種函數就稱之為高階函數。如下,是一個簡單的高階函數示例,將sum函數作為變量傳給add_list()裡的function作為高階函數傳參。然後在add_list()裡還調用了function。
Python函數式編程中常用的高階函數(內建函數)
map()
Python函數式編程中的map()高階函數,它接收一個函數 function 和一個 list,第一個參數 function 以參數序列中的每一個元素調用 function 函數,返回包含每次 function 函數返回值的新列表。
函數語法
map(function, iterable, ...)
參數
- function : 函數
- iterable : 一個或多個序列
返回
- Python 2.x 返回列表,Python 3.x 返回迭代器。
示例
reduce()
reduce() 函數會對參數序列中元素進行累積。
函數將一個數據集合(列表、元組等)中的所有數據進行下列操作:用傳給 reduce 中的函數 function(這個函數必須接收兩個參數)先對集合中的第 1、2 個元素進行操作,得到的結果再與第三個數據用 function 函數運算,最後得到一個結果。
函數語法
reduce(function, iterable[, initializer])
參數
- function -- 函數,有兩個參數
- iterable -- 可迭代對象
- initializer -- 可選,初始參數
返回
- 返回函數計算結果。
示例如下,列表元素求乘積:
reduce(f, [x1, x2, x3]) 同等於 function(f(x1, x2), x3)
filter()
filter() 函數用於過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表。
該接收兩個參數,第一個為函數,第二個為序列,序列的每個元素作為參數傳遞給函數進行判,然後返回 True 或 False,最後將返回 True 的元素放到新列表中。
函數語法
以下是 filter() 方法的語法:
filter(function, iterable)
參數
- function -- 判斷函數。
- iterable -- 可迭代對象。
返回
- 返回列表
示例如下,保留list_o 中偶數:
函數是Python內建支持的一種封裝,我們通過把大段代碼拆成函數,通過一層一層的函數調用,就可以把複雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程序設計。函數就是面向過程的程序設計的基本單元。
而函數式編程(請注意多了一個“式”字)——Functional Programming,雖然也可以歸結到面向過程的程序設計,但其思想更接近數學計算。
函數式編程就是一種抽象程度很高的編程範式,純粹的函數式編程語言編寫的函數沒有變量,因此,任意一個函數,只要輸入是確定的,輸出就是確定的,這種純函數我們稱之為沒有副作用。而允許使用變量的程序設計語言,由於函數內部的變量狀態不確定,同樣的輸入,可能得到不同的輸出,因此,這種函數是有副作用的。
Python對函數式編程提供部分支持。由於Python允許使用變量,因此,Python不是純函數式編程語言。
高階函數(Higher-order function)
我們以一個具體的實例,來理解下是什麼是高階函數。
變量可以指向函數
下面例子,調用sum函數,打印調用sum函數的返回結果,同時打印sum函數,如下:
上面我們將sum(num_list)的結果返回給sum_list,那麼,如果把函數本身賦值給變量呢?,如下,將函數sum賦值給變量fun_sum,打印fun_sum變量可以發現fun_sum變量指向了函數sum。
函數可以作為變量傳入其他函數
既然變量可以指向函數,那麼函數就可以接收作為參數的其他函數,這種函數就稱之為高階函數。如下,是一個簡單的高階函數示例,將sum函數作為變量傳給add_list()裡的function作為高階函數傳參。然後在add_list()裡還調用了function。
Python函數式編程中常用的高階函數(內建函數)
map()
Python函數式編程中的map()高階函數,它接收一個函數 function 和一個 list,第一個參數 function 以參數序列中的每一個元素調用 function 函數,返回包含每次 function 函數返回值的新列表。
函數語法
map(function, iterable, ...)
參數
- function : 函數
- iterable : 一個或多個序列
返回
- Python 2.x 返回列表,Python 3.x 返回迭代器。
示例
reduce()
reduce() 函數會對參數序列中元素進行累積。
函數將一個數據集合(列表、元組等)中的所有數據進行下列操作:用傳給 reduce 中的函數 function(這個函數必須接收兩個參數)先對集合中的第 1、2 個元素進行操作,得到的結果再與第三個數據用 function 函數運算,最後得到一個結果。
函數語法
reduce(function, iterable[, initializer])
參數
- function -- 函數,有兩個參數
- iterable -- 可迭代對象
- initializer -- 可選,初始參數
返回
- 返回函數計算結果。
示例如下,列表元素求乘積:
reduce(f, [x1, x2, x3]) 同等於 function(f(x1, x2), x3)
filter()
filter() 函數用於過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表。
該接收兩個參數,第一個為函數,第二個為序列,序列的每個元素作為參數傳遞給函數進行判,然後返回 True 或 False,最後將返回 True 的元素放到新列表中。
函數語法
以下是 filter() 方法的語法:
filter(function, iterable)
參數
- function -- 判斷函數。
- iterable -- 可迭代對象。
返回
- 返回列表
示例如下,保留list_o 中偶數:
sorted()
sorted()函數就可以對list進行排序。
函數語法
sorted(iterable[, cmp[, key[, reverse]]])
參數:
- iterable -- 可迭代對象。
- cmp -- 比較的函數,這個具有兩個參數,參數的值都是從可迭代對象中取出,此函數必須遵守的規則為,大於則返回1,小於則返回-1,等於則返回0。
- key -- 主要是用來進行比較的元素,只有一個參數,具體的函數的參數就是取自於可迭代對象中,指定可迭代對象中的一個元素來進行排序。
- reverse -- 排序規則,reverse = True 降序 , reverse = False 升序(默認)。
返回
- 返回重新排序的列表。
sorted()函數也是一個高階函數,它還可以接收一個key函數來實現自定義的排序,例如按square返回值大小排序:
函數是Python內建支持的一種封裝,我們通過把大段代碼拆成函數,通過一層一層的函數調用,就可以把複雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程序設計。函數就是面向過程的程序設計的基本單元。
而函數式編程(請注意多了一個“式”字)——Functional Programming,雖然也可以歸結到面向過程的程序設計,但其思想更接近數學計算。
函數式編程就是一種抽象程度很高的編程範式,純粹的函數式編程語言編寫的函數沒有變量,因此,任意一個函數,只要輸入是確定的,輸出就是確定的,這種純函數我們稱之為沒有副作用。而允許使用變量的程序設計語言,由於函數內部的變量狀態不確定,同樣的輸入,可能得到不同的輸出,因此,這種函數是有副作用的。
Python對函數式編程提供部分支持。由於Python允許使用變量,因此,Python不是純函數式編程語言。
高階函數(Higher-order function)
我們以一個具體的實例,來理解下是什麼是高階函數。
變量可以指向函數
下面例子,調用sum函數,打印調用sum函數的返回結果,同時打印sum函數,如下:
上面我們將sum(num_list)的結果返回給sum_list,那麼,如果把函數本身賦值給變量呢?,如下,將函數sum賦值給變量fun_sum,打印fun_sum變量可以發現fun_sum變量指向了函數sum。
函數可以作為變量傳入其他函數
既然變量可以指向函數,那麼函數就可以接收作為參數的其他函數,這種函數就稱之為高階函數。如下,是一個簡單的高階函數示例,將sum函數作為變量傳給add_list()裡的function作為高階函數傳參。然後在add_list()裡還調用了function。
Python函數式編程中常用的高階函數(內建函數)
map()
Python函數式編程中的map()高階函數,它接收一個函數 function 和一個 list,第一個參數 function 以參數序列中的每一個元素調用 function 函數,返回包含每次 function 函數返回值的新列表。
函數語法
map(function, iterable, ...)
參數
- function : 函數
- iterable : 一個或多個序列
返回
- Python 2.x 返回列表,Python 3.x 返回迭代器。
示例
reduce()
reduce() 函數會對參數序列中元素進行累積。
函數將一個數據集合(列表、元組等)中的所有數據進行下列操作:用傳給 reduce 中的函數 function(這個函數必須接收兩個參數)先對集合中的第 1、2 個元素進行操作,得到的結果再與第三個數據用 function 函數運算,最後得到一個結果。
函數語法
reduce(function, iterable[, initializer])
參數
- function -- 函數,有兩個參數
- iterable -- 可迭代對象
- initializer -- 可選,初始參數
返回
- 返回函數計算結果。
示例如下,列表元素求乘積:
reduce(f, [x1, x2, x3]) 同等於 function(f(x1, x2), x3)
filter()
filter() 函數用於過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表。
該接收兩個參數,第一個為函數,第二個為序列,序列的每個元素作為參數傳遞給函數進行判,然後返回 True 或 False,最後將返回 True 的元素放到新列表中。
函數語法
以下是 filter() 方法的語法:
filter(function, iterable)
參數
- function -- 判斷函數。
- iterable -- 可迭代對象。
返回
- 返回列表
示例如下,保留list_o 中偶數:
sorted()
sorted()函數就可以對list進行排序。
函數語法
sorted(iterable[, cmp[, key[, reverse]]])
參數:
- iterable -- 可迭代對象。
- cmp -- 比較的函數,這個具有兩個參數,參數的值都是從可迭代對象中取出,此函數必須遵守的規則為,大於則返回1,小於則返回-1,等於則返回0。
- key -- 主要是用來進行比較的元素,只有一個參數,具體的函數的參數就是取自於可迭代對象中,指定可迭代對象中的一個元素來進行排序。
- reverse -- 排序規則,reverse = True 降序 , reverse = False 升序(默認)。
返回
- 返回重新排序的列表。
sorted()函數也是一個高階函數,它還可以接收一個key函數來實現自定義的排序,例如按square返回值大小排序:
匿名函數 lambda
Python使用lambda關鍵字創造匿名函數。所謂匿名,即不再使用顯式def語句這樣標準的形式定義一個函數。這種語句的目的是由於性能的原因,在調用時繞過函數的棧分配。其語法是:
lambda [arg1[, arg2, ... argN]]: expression
其中,參數是可選的,如果使用參數的話,參數通常也會在表達式之中出現,冒號前面的x表示函數參數,同時匿名函數有個限制,就是隻能有一個表達式,不需要寫return,返回值就是該表達式的結果。
匿名函數通常被用作高階函數(Higher-order function:參數為函數的函數)的參數,比如,上述介紹的幾個內置高階函數:map(),reduce(),filter(),對應的Python實現樣例如下:
map()函數
函數是Python內建支持的一種封裝,我們通過把大段代碼拆成函數,通過一層一層的函數調用,就可以把複雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程序設計。函數就是面向過程的程序設計的基本單元。
而函數式編程(請注意多了一個“式”字)——Functional Programming,雖然也可以歸結到面向過程的程序設計,但其思想更接近數學計算。
函數式編程就是一種抽象程度很高的編程範式,純粹的函數式編程語言編寫的函數沒有變量,因此,任意一個函數,只要輸入是確定的,輸出就是確定的,這種純函數我們稱之為沒有副作用。而允許使用變量的程序設計語言,由於函數內部的變量狀態不確定,同樣的輸入,可能得到不同的輸出,因此,這種函數是有副作用的。
Python對函數式編程提供部分支持。由於Python允許使用變量,因此,Python不是純函數式編程語言。
高階函數(Higher-order function)
我們以一個具體的實例,來理解下是什麼是高階函數。
變量可以指向函數
下面例子,調用sum函數,打印調用sum函數的返回結果,同時打印sum函數,如下:
上面我們將sum(num_list)的結果返回給sum_list,那麼,如果把函數本身賦值給變量呢?,如下,將函數sum賦值給變量fun_sum,打印fun_sum變量可以發現fun_sum變量指向了函數sum。
函數可以作為變量傳入其他函數
既然變量可以指向函數,那麼函數就可以接收作為參數的其他函數,這種函數就稱之為高階函數。如下,是一個簡單的高階函數示例,將sum函數作為變量傳給add_list()裡的function作為高階函數傳參。然後在add_list()裡還調用了function。
Python函數式編程中常用的高階函數(內建函數)
map()
Python函數式編程中的map()高階函數,它接收一個函數 function 和一個 list,第一個參數 function 以參數序列中的每一個元素調用 function 函數,返回包含每次 function 函數返回值的新列表。
函數語法
map(function, iterable, ...)
參數
- function : 函數
- iterable : 一個或多個序列
返回
- Python 2.x 返回列表,Python 3.x 返回迭代器。
示例
reduce()
reduce() 函數會對參數序列中元素進行累積。
函數將一個數據集合(列表、元組等)中的所有數據進行下列操作:用傳給 reduce 中的函數 function(這個函數必須接收兩個參數)先對集合中的第 1、2 個元素進行操作,得到的結果再與第三個數據用 function 函數運算,最後得到一個結果。
函數語法
reduce(function, iterable[, initializer])
參數
- function -- 函數,有兩個參數
- iterable -- 可迭代對象
- initializer -- 可選,初始參數
返回
- 返回函數計算結果。
示例如下,列表元素求乘積:
reduce(f, [x1, x2, x3]) 同等於 function(f(x1, x2), x3)
filter()
filter() 函數用於過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表。
該接收兩個參數,第一個為函數,第二個為序列,序列的每個元素作為參數傳遞給函數進行判,然後返回 True 或 False,最後將返回 True 的元素放到新列表中。
函數語法
以下是 filter() 方法的語法:
filter(function, iterable)
參數
- function -- 判斷函數。
- iterable -- 可迭代對象。
返回
- 返回列表
示例如下,保留list_o 中偶數:
sorted()
sorted()函數就可以對list進行排序。
函數語法
sorted(iterable[, cmp[, key[, reverse]]])
參數:
- iterable -- 可迭代對象。
- cmp -- 比較的函數,這個具有兩個參數,參數的值都是從可迭代對象中取出,此函數必須遵守的規則為,大於則返回1,小於則返回-1,等於則返回0。
- key -- 主要是用來進行比較的元素,只有一個參數,具體的函數的參數就是取自於可迭代對象中,指定可迭代對象中的一個元素來進行排序。
- reverse -- 排序規則,reverse = True 降序 , reverse = False 升序(默認)。
返回
- 返回重新排序的列表。
sorted()函數也是一個高階函數,它還可以接收一個key函數來實現自定義的排序,例如按square返回值大小排序:
匿名函數 lambda
Python使用lambda關鍵字創造匿名函數。所謂匿名,即不再使用顯式def語句這樣標準的形式定義一個函數。這種語句的目的是由於性能的原因,在調用時繞過函數的棧分配。其語法是:
lambda [arg1[, arg2, ... argN]]: expression
其中,參數是可選的,如果使用參數的話,參數通常也會在表達式之中出現,冒號前面的x表示函數參數,同時匿名函數有個限制,就是隻能有一個表達式,不需要寫return,返回值就是該表達式的結果。
匿名函數通常被用作高階函數(Higher-order function:參數為函數的函數)的參數,比如,上述介紹的幾個內置高階函數:map(),reduce(),filter(),對應的Python實現樣例如下:
map()函數
reduce()函數
函數是Python內建支持的一種封裝,我們通過把大段代碼拆成函數,通過一層一層的函數調用,就可以把複雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程序設計。函數就是面向過程的程序設計的基本單元。
而函數式編程(請注意多了一個“式”字)——Functional Programming,雖然也可以歸結到面向過程的程序設計,但其思想更接近數學計算。
函數式編程就是一種抽象程度很高的編程範式,純粹的函數式編程語言編寫的函數沒有變量,因此,任意一個函數,只要輸入是確定的,輸出就是確定的,這種純函數我們稱之為沒有副作用。而允許使用變量的程序設計語言,由於函數內部的變量狀態不確定,同樣的輸入,可能得到不同的輸出,因此,這種函數是有副作用的。
Python對函數式編程提供部分支持。由於Python允許使用變量,因此,Python不是純函數式編程語言。
高階函數(Higher-order function)
我們以一個具體的實例,來理解下是什麼是高階函數。
變量可以指向函數
下面例子,調用sum函數,打印調用sum函數的返回結果,同時打印sum函數,如下:
上面我們將sum(num_list)的結果返回給sum_list,那麼,如果把函數本身賦值給變量呢?,如下,將函數sum賦值給變量fun_sum,打印fun_sum變量可以發現fun_sum變量指向了函數sum。
函數可以作為變量傳入其他函數
既然變量可以指向函數,那麼函數就可以接收作為參數的其他函數,這種函數就稱之為高階函數。如下,是一個簡單的高階函數示例,將sum函數作為變量傳給add_list()裡的function作為高階函數傳參。然後在add_list()裡還調用了function。
Python函數式編程中常用的高階函數(內建函數)
map()
Python函數式編程中的map()高階函數,它接收一個函數 function 和一個 list,第一個參數 function 以參數序列中的每一個元素調用 function 函數,返回包含每次 function 函數返回值的新列表。
函數語法
map(function, iterable, ...)
參數
- function : 函數
- iterable : 一個或多個序列
返回
- Python 2.x 返回列表,Python 3.x 返回迭代器。
示例
reduce()
reduce() 函數會對參數序列中元素進行累積。
函數將一個數據集合(列表、元組等)中的所有數據進行下列操作:用傳給 reduce 中的函數 function(這個函數必須接收兩個參數)先對集合中的第 1、2 個元素進行操作,得到的結果再與第三個數據用 function 函數運算,最後得到一個結果。
函數語法
reduce(function, iterable[, initializer])
參數
- function -- 函數,有兩個參數
- iterable -- 可迭代對象
- initializer -- 可選,初始參數
返回
- 返回函數計算結果。
示例如下,列表元素求乘積:
reduce(f, [x1, x2, x3]) 同等於 function(f(x1, x2), x3)
filter()
filter() 函數用於過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表。
該接收兩個參數,第一個為函數,第二個為序列,序列的每個元素作為參數傳遞給函數進行判,然後返回 True 或 False,最後將返回 True 的元素放到新列表中。
函數語法
以下是 filter() 方法的語法:
filter(function, iterable)
參數
- function -- 判斷函數。
- iterable -- 可迭代對象。
返回
- 返回列表
示例如下,保留list_o 中偶數:
sorted()
sorted()函數就可以對list進行排序。
函數語法
sorted(iterable[, cmp[, key[, reverse]]])
參數:
- iterable -- 可迭代對象。
- cmp -- 比較的函數,這個具有兩個參數,參數的值都是從可迭代對象中取出,此函數必須遵守的規則為,大於則返回1,小於則返回-1,等於則返回0。
- key -- 主要是用來進行比較的元素,只有一個參數,具體的函數的參數就是取自於可迭代對象中,指定可迭代對象中的一個元素來進行排序。
- reverse -- 排序規則,reverse = True 降序 , reverse = False 升序(默認)。
返回
- 返回重新排序的列表。
sorted()函數也是一個高階函數,它還可以接收一個key函數來實現自定義的排序,例如按square返回值大小排序:
匿名函數 lambda
Python使用lambda關鍵字創造匿名函數。所謂匿名,即不再使用顯式def語句這樣標準的形式定義一個函數。這種語句的目的是由於性能的原因,在調用時繞過函數的棧分配。其語法是:
lambda [arg1[, arg2, ... argN]]: expression
其中,參數是可選的,如果使用參數的話,參數通常也會在表達式之中出現,冒號前面的x表示函數參數,同時匿名函數有個限制,就是隻能有一個表達式,不需要寫return,返回值就是該表達式的結果。
匿名函數通常被用作高階函數(Higher-order function:參數為函數的函數)的參數,比如,上述介紹的幾個內置高階函數:map(),reduce(),filter(),對應的Python實現樣例如下:
map()函數
reduce()函數
filter()函數
函數是Python內建支持的一種封裝,我們通過把大段代碼拆成函數,通過一層一層的函數調用,就可以把複雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程序設計。函數就是面向過程的程序設計的基本單元。
而函數式編程(請注意多了一個“式”字)——Functional Programming,雖然也可以歸結到面向過程的程序設計,但其思想更接近數學計算。
函數式編程就是一種抽象程度很高的編程範式,純粹的函數式編程語言編寫的函數沒有變量,因此,任意一個函數,只要輸入是確定的,輸出就是確定的,這種純函數我們稱之為沒有副作用。而允許使用變量的程序設計語言,由於函數內部的變量狀態不確定,同樣的輸入,可能得到不同的輸出,因此,這種函數是有副作用的。
Python對函數式編程提供部分支持。由於Python允許使用變量,因此,Python不是純函數式編程語言。
高階函數(Higher-order function)
我們以一個具體的實例,來理解下是什麼是高階函數。
變量可以指向函數
下面例子,調用sum函數,打印調用sum函數的返回結果,同時打印sum函數,如下:
上面我們將sum(num_list)的結果返回給sum_list,那麼,如果把函數本身賦值給變量呢?,如下,將函數sum賦值給變量fun_sum,打印fun_sum變量可以發現fun_sum變量指向了函數sum。
函數可以作為變量傳入其他函數
既然變量可以指向函數,那麼函數就可以接收作為參數的其他函數,這種函數就稱之為高階函數。如下,是一個簡單的高階函數示例,將sum函數作為變量傳給add_list()裡的function作為高階函數傳參。然後在add_list()裡還調用了function。
Python函數式編程中常用的高階函數(內建函數)
map()
Python函數式編程中的map()高階函數,它接收一個函數 function 和一個 list,第一個參數 function 以參數序列中的每一個元素調用 function 函數,返回包含每次 function 函數返回值的新列表。
函數語法
map(function, iterable, ...)
參數
- function : 函數
- iterable : 一個或多個序列
返回
- Python 2.x 返回列表,Python 3.x 返回迭代器。
示例
reduce()
reduce() 函數會對參數序列中元素進行累積。
函數將一個數據集合(列表、元組等)中的所有數據進行下列操作:用傳給 reduce 中的函數 function(這個函數必須接收兩個參數)先對集合中的第 1、2 個元素進行操作,得到的結果再與第三個數據用 function 函數運算,最後得到一個結果。
函數語法
reduce(function, iterable[, initializer])
參數
- function -- 函數,有兩個參數
- iterable -- 可迭代對象
- initializer -- 可選,初始參數
返回
- 返回函數計算結果。
示例如下,列表元素求乘積:
reduce(f, [x1, x2, x3]) 同等於 function(f(x1, x2), x3)
filter()
filter() 函數用於過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表。
該接收兩個參數,第一個為函數,第二個為序列,序列的每個元素作為參數傳遞給函數進行判,然後返回 True 或 False,最後將返回 True 的元素放到新列表中。
函數語法
以下是 filter() 方法的語法:
filter(function, iterable)
參數
- function -- 判斷函數。
- iterable -- 可迭代對象。
返回
- 返回列表
示例如下,保留list_o 中偶數:
sorted()
sorted()函數就可以對list進行排序。
函數語法
sorted(iterable[, cmp[, key[, reverse]]])
參數:
- iterable -- 可迭代對象。
- cmp -- 比較的函數,這個具有兩個參數,參數的值都是從可迭代對象中取出,此函數必須遵守的規則為,大於則返回1,小於則返回-1,等於則返回0。
- key -- 主要是用來進行比較的元素,只有一個參數,具體的函數的參數就是取自於可迭代對象中,指定可迭代對象中的一個元素來進行排序。
- reverse -- 排序規則,reverse = True 降序 , reverse = False 升序(默認)。
返回
- 返回重新排序的列表。
sorted()函數也是一個高階函數,它還可以接收一個key函數來實現自定義的排序,例如按square返回值大小排序:
匿名函數 lambda
Python使用lambda關鍵字創造匿名函數。所謂匿名,即不再使用顯式def語句這樣標準的形式定義一個函數。這種語句的目的是由於性能的原因,在調用時繞過函數的棧分配。其語法是:
lambda [arg1[, arg2, ... argN]]: expression
其中,參數是可選的,如果使用參數的話,參數通常也會在表達式之中出現,冒號前面的x表示函數參數,同時匿名函數有個限制,就是隻能有一個表達式,不需要寫return,返回值就是該表達式的結果。
匿名函數通常被用作高階函數(Higher-order function:參數為函數的函數)的參數,比如,上述介紹的幾個內置高階函數:map(),reduce(),filter(),對應的Python實現樣例如下:
map()函數
reduce()函數
filter()函數
sorted()函數
函數是Python內建支持的一種封裝,我們通過把大段代碼拆成函數,通過一層一層的函數調用,就可以把複雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程序設計。函數就是面向過程的程序設計的基本單元。
而函數式編程(請注意多了一個“式”字)——Functional Programming,雖然也可以歸結到面向過程的程序設計,但其思想更接近數學計算。
函數式編程就是一種抽象程度很高的編程範式,純粹的函數式編程語言編寫的函數沒有變量,因此,任意一個函數,只要輸入是確定的,輸出就是確定的,這種純函數我們稱之為沒有副作用。而允許使用變量的程序設計語言,由於函數內部的變量狀態不確定,同樣的輸入,可能得到不同的輸出,因此,這種函數是有副作用的。
Python對函數式編程提供部分支持。由於Python允許使用變量,因此,Python不是純函數式編程語言。
高階函數(Higher-order function)
我們以一個具體的實例,來理解下是什麼是高階函數。
變量可以指向函數
下面例子,調用sum函數,打印調用sum函數的返回結果,同時打印sum函數,如下:
上面我們將sum(num_list)的結果返回給sum_list,那麼,如果把函數本身賦值給變量呢?,如下,將函數sum賦值給變量fun_sum,打印fun_sum變量可以發現fun_sum變量指向了函數sum。
函數可以作為變量傳入其他函數
既然變量可以指向函數,那麼函數就可以接收作為參數的其他函數,這種函數就稱之為高階函數。如下,是一個簡單的高階函數示例,將sum函數作為變量傳給add_list()裡的function作為高階函數傳參。然後在add_list()裡還調用了function。
Python函數式編程中常用的高階函數(內建函數)
map()
Python函數式編程中的map()高階函數,它接收一個函數 function 和一個 list,第一個參數 function 以參數序列中的每一個元素調用 function 函數,返回包含每次 function 函數返回值的新列表。
函數語法
map(function, iterable, ...)
參數
- function : 函數
- iterable : 一個或多個序列
返回
- Python 2.x 返回列表,Python 3.x 返回迭代器。
示例
reduce()
reduce() 函數會對參數序列中元素進行累積。
函數將一個數據集合(列表、元組等)中的所有數據進行下列操作:用傳給 reduce 中的函數 function(這個函數必須接收兩個參數)先對集合中的第 1、2 個元素進行操作,得到的結果再與第三個數據用 function 函數運算,最後得到一個結果。
函數語法
reduce(function, iterable[, initializer])
參數
- function -- 函數,有兩個參數
- iterable -- 可迭代對象
- initializer -- 可選,初始參數
返回
- 返回函數計算結果。
示例如下,列表元素求乘積:
reduce(f, [x1, x2, x3]) 同等於 function(f(x1, x2), x3)
filter()
filter() 函數用於過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表。
該接收兩個參數,第一個為函數,第二個為序列,序列的每個元素作為參數傳遞給函數進行判,然後返回 True 或 False,最後將返回 True 的元素放到新列表中。
函數語法
以下是 filter() 方法的語法:
filter(function, iterable)
參數
- function -- 判斷函數。
- iterable -- 可迭代對象。
返回
- 返回列表
示例如下,保留list_o 中偶數:
sorted()
sorted()函數就可以對list進行排序。
函數語法
sorted(iterable[, cmp[, key[, reverse]]])
參數:
- iterable -- 可迭代對象。
- cmp -- 比較的函數,這個具有兩個參數,參數的值都是從可迭代對象中取出,此函數必須遵守的規則為,大於則返回1,小於則返回-1,等於則返回0。
- key -- 主要是用來進行比較的元素,只有一個參數,具體的函數的參數就是取自於可迭代對象中,指定可迭代對象中的一個元素來進行排序。
- reverse -- 排序規則,reverse = True 降序 , reverse = False 升序(默認)。
返回
- 返回重新排序的列表。
sorted()函數也是一個高階函數,它還可以接收一個key函數來實現自定義的排序,例如按square返回值大小排序:
匿名函數 lambda
Python使用lambda關鍵字創造匿名函數。所謂匿名,即不再使用顯式def語句這樣標準的形式定義一個函數。這種語句的目的是由於性能的原因,在調用時繞過函數的棧分配。其語法是:
lambda [arg1[, arg2, ... argN]]: expression
其中,參數是可選的,如果使用參數的話,參數通常也會在表達式之中出現,冒號前面的x表示函數參數,同時匿名函數有個限制,就是隻能有一個表達式,不需要寫return,返回值就是該表達式的結果。
匿名函數通常被用作高階函數(Higher-order function:參數為函數的函數)的參數,比如,上述介紹的幾個內置高階函數:map(),reduce(),filter(),對應的Python實現樣例如下:
map()函數
reduce()函數
filter()函數
sorted()函數