1.函式式程式設計的含義:
函式式程式設計是一種程式設計的基本風格,就是構建程式的結構和元素的方式。函式式程式設計將計算過程看做是數學函式,也就是可以使用表示式程式設計。在函式的**中,函式的返回值只以來傳入函式的引數,因此使用相同的引數呼叫2次就會得到相同的結果。如果說這段話很難理解,我覺得可以這麼想,函式式程式設計就是一種函式,或者是一種結構,在該結構中,將函式和函式的引數都作為引數。
2.函式式程式設計具有的優點:
a.便於進行單元測試
b.便於除錯
c.適合並行執行
1.lambda表示式
lambda表示式是一種匿名函式,它的結構如下
lambda 引數列表:函式返回值或表示式語句lambda表示式可以做如下功能:
a.定義函式
例如如下**:
getsum = lambda x,y : x+y
該結構和如下**是一樣的:
def getsum(x,y):
return x+y
使用lambda表示式定義完成函式後,可以直接引用該函式,如下**:
getsum = lambda x,y : x+y
print(getsum(1,2))
結果會顯示結果為:3
b.構建lambda表示式陣列
定義lambda表示式陣列的結構為:
陣列名=[(lambda 引數:函式返回值表示式1),((lambda 引數:函式返回值表示式2)···]呼叫lamda表示式陣列的方式是:
陣列名[索引](引數列表)舉例如下
myarr =[(lambda x,y: x+y),(lambda x,y:x*2+y*2),(lambda x,y:x*3+y*3)]
print(myarr[0](1,1),myarr[1](2,3),myarr[2](1,4))
在上述**中定義了乙個lambda表示式陣列,然後給每乙個表示式賦值,得出的結果分別為:2 10 15
lambda表示式也可以直接作為函式的返回值,可寫成return lambda表示式即可
2. map函式
map函式將指定序列中的元素作為引數依次被制定函式呼叫,並輸出乙個新的序列作為返回值,map函式的語法結構為:
結果序列 = map(函式名,[引數1的序列],[引數2的序列]···)具體例子可看如下**
#定義函式getsum()
def getsum(x,y):
return x+y
# 使用map函式將getsum作為引數,並將兩個序列的內的元素分別作為x和y的引數傳遞值
arrr = map(getsum,[1,2,3],[2,5,6])
for i in arrr:
print(i)
經過計算,輸出的結果分別是
3
79
可以將map函式與lambda表示式一起使用,**如下:
arr2 = map(lambda x: x ** 2, [2,4,6,8])
for i in arr2:
print(i)
輸出結果為:
4
1636
64
3.filter函式
filter函式可以對指定的序列進行過濾,該函式的語法結構如下:
filter(函式,序列)在該語法結構中,filter內的函式返回值是布林值false或者是true,序列值可以是列表、元組或者是字串,返回的結果為函式判斷為true對應的序列元素,具體看如下**:
#定義乙個求偶數的函式is_even
def is_even(x):
return x%2==0
#使用filter函式呼叫is_even函式
arr3 = filter(is_even,[1,2,3,4,5,6,7,8])
for i in arr3:
print(i)
返回值為:
246
8
4.reduce函式
這個函式非常有意思,有點遞迴的感覺,引用的函式必須有兩個引數,在引用序列的時候,序列中第乙個和第二個元素作為引數輸出結果作為新的第乙個引數,第三個元素變成第二引數,以此結合。該函式從python3.0開始就不能直接在python內建函式內了,需要呼叫functools模組才可以。
函式的具體語法結構如下:
計算結果 = reduce(函式,序列)具體示例**如下:
#引入functools模組
import functools
#定義乙個簡單的數相乘的函式求積
def com(x,y):
return x*y
result = functools.reduce(com,[1,2,3,4,5,6,7])
print(result)
輸出結果為:5040
該函式的執行過程就是123*···*7=5040
可以理解為com(com(com(com(com(com(1,2),3),4),5),6),7)的結果
和如下的**有類似:
def cum(x):
if x==1:
return 1
else:
return cum(x-1)*x
print(cum(7))
該**的輸出結果也是:5040
5.zip函式
zip函式就像它的名字一樣是個壓縮的用途,一般是將多個元組打包成乙個列表進行運算,所以zip函式的引數都是元組。
壓縮的示例**如下:
a = [1,2,3]
b = [3,4,5]
c = [7,6,0]
zippped = zip(a,b,c)
for i in zippped:
print(i)
輸出結果為:
(1, 3, 7)
(2, 4, 6)
(3, 5, 0)
zip函式也可以把壓縮的列表進行解壓,在打包結果前加上*即可,示例**如下:
a = [1,2,3]
b = [3,4,5]
c = [7,6,0]
#將資料壓縮,結果為zipped
zippped = zip(a,b,c)
#將zipped解壓為uzipped
uzipped = zip(*zippped)
for j in uzipped:
print(j)
輸出結果為:
(1, 2, 3)
(3, 4, 5)
(7, 6, 0)
Python「函式式程式設計」中常用的函式
1.map func,seq seq,對序列中的每個元素應用函式,python2中map 返回的是列表,python3中返回的是迭代器,可以用list 轉換成列表。以下例子為python3 python2中返回其函式為真的元素列表,python3中返回的是迭代器,可以用list 轉換成列表。以下是p...
C 中常用的函式總結
1.字串轉數字函式 字串轉數字是程式設計中常見的需求,自己手寫這個需求倒不是很難,但是如果有直接可以呼叫的庫則是十分便捷的。為此,c 標準庫提供了一系列的字串轉數字的函式。常用的如下 1.1stoi 函式 include include include using namespace std int...
函式式程式設計總結
尾遞迴解決的是棧的記憶成本,更好防止堆疊溢位。遞迴在兩種情況下會掛 一是沒有結束條件 二是堆疊記憶體超過了最大限制。1 柯里化 柯里化是一種 預載入 函式的方法,通過傳遞較少的引數,得到乙個已經記住了這些引數的新函式,某種意義上講,這是一種對引數的 快取 是一種非常高效的編寫函式的方法。2 高階函式...