python學習筆記(四) 函式式程式設計

2021-08-17 18:58:02 字數 1997 閱讀 4971

1、高階函式:

高階函式(

higher-order function):

1、變數可以指向函式:函式本身也可以賦值給變數。

2、函式名也是變數:指向函式的變數。

3、傳入函式:變數能夠指向函式,函式的引數能接收變數,乙個函式就可以接收另乙個函式作為引數。

接收兩個引數:函式,iterable

map():將傳入的函式依次作用到序列的每個元素,並把結果作為乙個新的iterator返回。

reduce():把結果繼續和序列的下乙個元素做計算。

filter():用於過濾序列。把傳入的函式作用於序列的每個元素,根據返回結果true/false決定保留還是丟棄該元素。

map()、filter()

函式返回的是乙個

iterator

,也就是乙個惰性序列,所以要強迫

filter()

完成計算結果,需要用

list()

函式獲得所有結果並返回list。

sorted():排序函式。

1、可以對list進行排序;

2、可以接收乙個key函式實現自定義排序。如:key = abs

用sorted()排序的關鍵在於實現乙個對映函式。

2、返回函式與匿名函式:

返回函式:函式作為返回值。

在函式中定義函式,內部函式可以引用外部函式的引數和區域性變數,當外部函式返回函式時,相關引數和變數都儲存在返回的函式中,這種是成為「閉包」的程式結構。

閉包:當乙個函式返回了乙個函式後,其內部的區域性變數還被新函式引用。

返回的函式並不立即執行,而是調到才執行。

返回閉包時牢記一點:返回函式不要引用任何迴圈變數,或者後續會發生變化的變數。

如果一定要用到迴圈,就再建立乙個函式,用該函式的引數繫結當前迴圈變數的值,無論迴圈變數的值怎麼改變,已經繫結到函式引數的值不變。

匿名函式(lambda):不顯示定義函式,直接傳入匿名函式。

lambda x : 函式冒號前x表示引數。(可以沒有引數)

匿名函式只能有乙個表示式,不用寫return,返回值就是該表示式的結果。

不會有函式名衝突的問題,匿名函式也是乙個函式物件,可以賦值給變數,在利用變數呼叫該函式。

3、裝飾器:

函式物件有 _name_屬性,可以拿到函式名。f._name_

裝飾器(decorator):在**執行期間動態增加功能的方式。

需要使用python的@語法,將裝飾器置於函式定義處。@函式名

把裝飾器放在函式定義處,相當於執行:函式名 = 裝飾器(函式名)

import functools

def log(func):

@functools.wraps(func)

print('call %s():' % func.__name__)

return func(*args, **kw)

4、偏函式:

偏函式(partial function):functools.partial 把乙個函式的某些引數固定住(設定預設值),返回乙個新的函式。

通過設定引數的預設值,降低呼叫函式的難度。

int():把字串轉換為整數。

int(『123』,base = 10):base引數是幾進製的轉換,預設為10。

把int()預設值設為2進製:

int2 = functools.partial(int, base=2)

新函式只是改變了引數預設值,還可以傳入其他引數。

建立偏函式時,可以接收函式物件、*args、**kw 這三個引數。

當函式的引數個數太多,需要簡化時,可以呼叫functools.partial 建立乙個新的函式,這個函式可以固定住原函式的部分引數,使呼叫簡單。

四 Python函式式程式設計 學習筆記

1 map reduce函式 map 函式,iterable 把傳入的函式依次作用在序列的每個元素上,並將結果作為乙個新的iterable返回。例子 使用者輸入的英文名字,首字母大寫,其他小寫 coding utf 8 def normalize name return name 0 upper n...

廖雪峰Python教程學習筆記4 函式式程式設計

函式式程式設計就是一種抽象程度很高的程式設計正規化,其乙個特點是允許把函式本身作為引數傳入另乙個函式,還允許返回乙個函式!把函式作為引數傳入,這樣的函式稱為高階函式,函式式程式設計就是指這種高度抽象的程式設計正規化。既然變數可以指向函式,函式的引數能接收變數,那麼乙個函式就可以接收另乙個函式作為引數...

python學習(四) 函式式程式設計

函式是python內建支援的一種封裝,我們通過把大段 拆成函式,通過一層一層的函式呼叫,就可以把複雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程式設計。函式就是面向過程的程式設計的基本單元。而函式式程式設計 請注意多了乙個 式 字 functional programming,雖然也可以歸結...