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 functools4、偏函式:def log(func):
@functools.wraps(func)
print('call %s():' % func.__name__)
return func(*args, **kw)
偏函式(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,雖然也可以歸結...