三大特性:
immutable data不可變資料
first class functions函式像變數一樣使用
尾遞迴優化:每次遞迴都重用stack
好處:parallelization並行
lazy evaluation惰性求值
determinism 確定性
函式式程式設計
map & reduce
pipeline
recursing 遞迴
currying
higher order function 高階函式
def
inc(x)
:def
incx
(y):
return x + y
return incx
inc2 = inc(2)
inc5 = inc(5)
print inc2(5)
# 輸出 7
print inc5(5)
# 輸出 10
可以把別的函式作為引數傳入的函式,叫高階函式
f =
abs>>
> f =
abs>>
> f(-10
)10>>
>
python中函式本身也是物件,可以直接作為變數,作為引數使用
deffunc1
(x, y, f)
:return f(x)
+ f(y)
>>
> func1(3,
-5,abs)8
>>
>
python中functools提供了很多有用的功能,偏函式(partial func)即只設定部分引數,含預設引數的函式。
int('12345')
但int()
函式進製base作為arg2。可以不指定,預設base=10
int('1234',base=8)
def
int2
(x, base=2)
:# 定義乙個二進位制數轉換為十進位制
return
int(x, base)
functools.partial 幫我們建立偏函式,不需要我們自定義int2(
), 使用方式如下:
import functools
int2 = functools.partial(
int, base=2)
int2(
'10000'
)
疑問? 如果func是更多引數的呢? 對預設引數設定格式? 如果動態改變的引數在中間,如何使用這 partial?
類似地,可以對多個預設引數,以dict的格式帶入
kw =
int(
'10000'
,**kw)
# 因為int本身就是偏函式
類似地,也可以對偏函式應用list
list1 =[8
,9,12
]mymax = functools.partial(
max,10)
mymax(5,
6,7,
8)mymax(
*list1)
>>
> mymax(5,
6,7,
8)10>>
> mymax(
*list1)
12>>
>
Python 函式式程式設計 高階函式
functional programming,函式式程式設計。python對函式式程式設計提供部分支援。對於純函式程式設計,對任一函式,只要輸入是確定的,輸出就是確定的,可稱之為無 我們知道函式的計算結果可以賦值給變數,例如x abs 5 同理,變數也可以指向函式,例如f abs。如果乙個變數指向了...
Python函式式程式設計 高階函式
高階函式 1.實參是乙個函式名 2.函式的返回值是乙個函式 函式本身也可以賦值給變數,變數也可以指向函式 f abs print f 10 傳遞的引數包括函式名 deffun x,y,f return f x f y print fun 10 23,abs map 函式接收兩個引數,乙個是函式,乙個...
Python 函式式程式設計 01 高階函式
函式式程式設計是一種抽象程式很高的程式設計正規化,純粹的函式式程式語言編寫的函式沒有變數,因此,任意乙個函式,只要輸入是確定的,輸出就是確定的,這種純函式稱之為沒有 而允許使用變數的程式語言,由於函式內部的變數狀態不確定,同樣的輸入,可能得到的輸出不同,因此,這種函式是有 的。2.1 特性 1 變數...