函式式程式設計中常用的函式(總結)

2021-09-25 17:13:44 字數 3897 閱讀 3128

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 高階函式...