函數式程式設計是使用一系列函數去解決問題,按照一般程式設計思維,面對問題時我們的思考方式是“怎麼幹”,而函數函數式程式設計的思考方式是我要“幹嘛”。 至於函數式程式設計的特性暫不總結,我們直接拿例子來體會什麼是函數式程式設計。
lambda表達式(匿名函數):
普通函數與匿名函數的定義方式:
普通函數def add( a,b):
return a + bprint add(2,3) #匿名函数add = lambda a,b : a + bprint add(2,3)#========输出===========5 5
匿名函數的命名規則,用lamdba 關鍵字標識,冒號(:)左側表示函數接收的參數(a, b) ,冒號(:)右邊表示函數的回傳值(a+b)。
因為lamdba在創建時不需要命名,所以,叫匿名函數^_^
Map函數:
##計算字串長度
#
abc = ['com','fnng','cnblogs']for i in range(len(abc)): print len(abc[i])#========输出===========347定義abc字串數組,計算abc長度然後循環輸出數組中每個字串的長度。 來看看map()函數是如何來實現這個過程的。
abc_len = map(len,['hao','fnng','cnblogs'])print abc_len#========输出===========[3, 4, 7]雖然,輸出的結果中是一樣的,但它們的形式不同,第一種是單純的數值了,map()函數的輸出仍然保持了數組的格式。 大小寫轉換;python提供有了,upper() 和 lower() 來轉換大小寫。
print ss.upper() #轉換成大寫print ss.lower() #轉換成小寫# ========輸出===========HELLO WORLD!
hello world!
def to_lower(item): return item.lower()name = map(to_lower,['cOm','FNng','cnBLoGs'])print name#========输出===========['com', 'fnng', 'cnblogs']這個範例中我們可以看到,我們寫義了一個函數toUpper,這個函數沒有改變傳進來的值,只是把傳進來的值做個簡單的操作,然後回傳。然後,我們把其用在map函數中,就可以很清楚地描述出我們想要做什麼。
#
abc = ['cOm','FNng','cnBLoGs']lowname = []for i in range(len(abc)): lowname.append(abc[i].lower())print lowname#========输出===========['hao', 'fnng', 'cnblogs']map()函數加上lambda表達式(匿名函數)可以實現更強大的功能。 #求平方#0*0,1*1,2*2,3*3,....8*8squares = map(lambda x : x*x ,range(9))print squares #========輸出===========[0, 1, 4, 9, 16, 25, 36, 49, 64]Reduce函數:
def add(a,b): return a+b add = reduce(add,[2,3,4])print add#========输出===========9 对于Reduce函数每次是需要对两个数据进行处理的,首选取2 和3 ,通过add函数相加之后得到5,接着拿5和4 ,再由add函数处理,最终得到9 。在前面map函數範例中我們可以看到,map函數是每次只對一個資料進行處理。 然後,我們發現透過Reduce函數加lambda表達式實現階乘是如何簡單:##5階乘#5! =1*2*3*4*5print reduce(lambda x,y: x*y, range(1,6))#========輸出===========120 Python中的除了map和reduce外,還有一些別的如filter, find, all, any的函數做輔助(其它函數式的語言也有),可以讓你的程式碼更簡潔,更易讀。我們再來看一個比較複雜的例子:#計算陣列中正整數的值number =[2, -5, 9, -7, 2, 5, 4, -1, 0, -3, 8 ] count = 0 sum = 0for i in range(len(number)):
if number[i]>0: count += 1 sum += number[i]print sum,countif count>0: average = sum/countprint average#==========輸出==========30 6 5如果用函數式編程,這個範例可以寫成這樣:
number =[2, -5, 9, -7, 2, 5, 4, -1, 0, -3, 8] sum = filter(lambda x: x>0, number) average = reduce(lambda x,y: x+y, sum)/len(sum)print average#========輸出===========5最後我們可以看到,函數式程式設計有以下好處:1)程式碼更簡單了。
2)資料集,操作,回傳值都放到了一起。
3)你在讀程式碼的時候,沒有了循環體,於是就可以少了些臨時變量,以及變數倒來倒去邏輯。
4)你的程式碼變成了在描述你要幹嘛,而不是怎麼去乾。
以上是python-函數式程式設計實例教程的詳細內容。更多資訊請關注PHP中文網其他相關文章!