python函数式编程思想_以python为例,浅谈函数式编程思想
引
數據集data_socrestudentid course score
1 math 89
2 english 76
. . .
問題:求各studentid總分
方法1-一般寫法:
student_score_total={}
for i in xrange(data_socre.shape[0]):
studentid=data_socre.ix[i,'studentid']
score=data_socre.ix[i,'score']
if studentid in student_score_total.keys():
student_score_total[studentid]+=score
else:
student_score_total[studentid]=score
方法2-函數式編程:
student_score_total=data_socre.ix[:,['studentid','score']].groupby('studentid').agg(sum)
函數式編程要明顯優于一般寫法(代碼量、可讀性)
那什么是函數式編程:
函數式編程定義
定義(百度百科):函數式編程是種編程方式,它將電腦運算視為函數的計算。函數編程語言最重要的基礎是λ演算(lambda calculus),而且λ演算的函數可以接受函數當作輸入(參數)和輸出(返回值)。簡單說,"函數式編程"是一種"編程范式"(programming paradigm),也就是如何編寫程序的方法論。它屬于"結構化編程"的一種,主要思想是把運算過程盡量寫成一系列嵌套的函數調用。
特性
一、高階函數
和一般函數差別:
1、輸入參數可以是函數
2、輸出結果可以是函數
例(python2.7,下同):
輸出結果可以是函數
def add(x,y):
def add_1():
return x+y
return add_1
add_1=add(1,2)
print add_1
輸入參數可以是函數
def add(x,y):
return x+y
def add_square(add):
return add*add
計算
print add_square(add(1,2))
9
二、閉包
定義(百度百科):閉包就是能夠讀取其他函數內部變量的函數。在本質上,閉包是將函數內部和函數外部連接起來的橋梁。
構成(必要):
1、外部函數
2、內部函數
3、外部函數變量
例:
def add(x,y):
def add_1():
return x+y
return add_1
外部函數(add):必須將內部函數作為返回
內部函數(add_1):必須要有一個內部函數
外部函數變量(x,y):內部函數必須引用外部函數變量
ps.可以發現閉包和高階函數是結合在一起使用
三、偏函數
定義:通過固定函數的部分參數值從而達到新建函數的作用
例:
def add(x,y):
return x+y
import functools
add_1 = functools.partial(add,x = 10)
print add_1(y=1) #等價于 add(x=10,y=1)
11
四、柯里化
定義:把有多個參數的函數變成單參數函數 公式:z = f(x, y) 變成 z = f(x)(y)
例:
def add(x, y):
return x+y
print add(1, 2)
3
def add(x):
def add_1(y):
return x + y
return add_1
print add(1)(2)
3
柯里化的偏函數應用
add_1 = add(x=1)
print add_1(y=2)
3
ps.python中只能對第一個參數做偏函數化(或者說只能是從外到內逐次參數做偏函數化)
五、惰性計算
理解:表達式不在它被綁定到變量之后就立即求值,而是在該值被取用的時候求值;邏輯處理與具體運算時間分離,只有當提交具體執行計算任務時,邏輯處理才開始運算
六、只用"表達式"
理解(百度百科):"表達式"(expression)是一個單純的運算過程,總是有返回值。也就是說,每一步都是單純的運算,而且都有返回值。
七、沒有"副作用"
理解:不產生除函數返回結果以外的任何影響(不修改任何外部變量)
八、引用透明性
理解:輸入相同的參數返回相同的結果;計算結果不依賴除輸入參數外的其他因素的影響
總結:
函數式編程優點
1、將問題處理拆解為各執行步驟:處理邏輯清晰、代碼可讀性高、后期易維護更新
2、通過使用已有的函數,大幅減少代碼量,提高編程效率
3、將邏輯處理和具體計算分離,通過組件化編程,降低使用者技術門檻(復雜邏輯處理由技術較好的人員事先實現準備好)
總結
以上是生活随笔為你收集整理的python函数式编程思想_以python为例,浅谈函数式编程思想的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python爬虫如何运行在web_Pyt
- 下一篇: python实例变量初始化_Python