久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

python入門教程(七)函數(shù)式編程,,匿名函數(shù)和map,filter函數(shù)

 靜幻堂 2018-10-07
極客饕餮 2018-09-17 16:55:05

ラムジ - PLANET.mp3

04:07.537000000000006

來自極客饕餮

每天堅持系統(tǒng)學(xué)習(xí)python,我在路上

一 高階函數(shù)

函數(shù)式編程的關(guān)鍵是高階函數(shù),高階函數(shù)將其他函數(shù)作為參數(shù),或?qū)⑵渥鳛閰?shù)返回.

例如:

def apply_twice(func,arg):

return func(func(arg))

def add_five(x):

return x+5

print(apply_twice(add_five,10))

結(jié)果:20

函數(shù)apply_twice將另一個函數(shù)add_five作為參數(shù),并在其內(nèi)部調(diào)用兩次.

二 純函數(shù)

函數(shù)式編程試圖使用純函數(shù).純函數(shù)沒有副作用,并且返回一個僅依賴于它們的參數(shù)的值.

這是數(shù)學(xué)工作中的函數(shù):例如,對于相同的x,cos(x)總是返回相同的結(jié)果.

純函數(shù)的例子:

def pure_function(x,y):

temp=x+2*y

return temp/(2*x+y)

非純函數(shù)的例子:

some_list=[]

def impure(arg):

some_list=append(arg)

上面的函數(shù)就不是純函數(shù),因為它改變了some_list的狀態(tài).

純函數(shù)的優(yōu)缺點:

優(yōu)點:

--更容易推理和測試.

--更高效.一旦函數(shù)有一個輸入,結(jié)果可以被存儲并在下一次需要該輸入的函數(shù)時被引用.

從而減少函數(shù)被調(diào)用的次數(shù).這被稱為memoization.

--更容易并行運行

缺點:使得I/O的其他簡單任務(wù)復(fù)雜化. 在某些情況下,它們將更難編寫.

三 lambda表達(dá)式

正常創(chuàng)建一個函數(shù)(使用def)會自動將其分配給一個變量.

這與其他對象(如字符串和整數(shù))的創(chuàng)建不同,它們可以在運行中創(chuàng)建,而不必將其分配給變量.

使用lambda語法創(chuàng)建函數(shù).這種方式創(chuàng)建的函數(shù)被稱為匿名函數(shù).

將一個簡單函數(shù)作為參數(shù)傳遞給另一個函數(shù)時,這種方法最常用.

語法如下:

def my_func(f,arg):

return f(arg)

my_func(lambda x:2*x*x,5)

lambda表達(dá)式?jīng)]有命名函數(shù)強(qiáng)大.它們只能做單一表達(dá)的事情--通常相當(dāng)于一行代碼

例如:

def polynomial(x):

return x**2+5*x+4

print(polynomial(-4))

#lambda

print((lambda x:x**2+5*x+4)(-4))

結(jié)果:

0

0

在上面的代碼中,我們創(chuàng)建了一個匿名函數(shù),并用參數(shù)調(diào)用它

可以將lambda函數(shù)分配給變量,并像普通函數(shù)一樣使用.

例如:

double=lambda x:x*2

print(double(7))

結(jié)果:

14

★但是,很少這樣做.用def定義一個函數(shù)通常會更好.

下面是一個例子:

triple=lambda x:x*3

add=lambda x,y:x+y

print(add(triple(3),4))

結(jié)果:13

四 map和filter

內(nèi)置的函數(shù)map和filter是在列表(或類似的稱為迭代的對象)上運行的非常有用的高階函數(shù)

函數(shù)map接收一個函數(shù)和一個迭代器作為參數(shù),并返回一個新的迭代器,該函數(shù)應(yīng)用于每個參數(shù).

例如:

def add_five(x):

return x+5

nums=[11,22,33,44,55]

result=list(map(add_five,nums))

print(result)

結(jié)果:

[16,27,38,49,60]

通過使用lambda語法,我們可以更容易地獲得相同的結(jié)果,

nums=[11,22,33,44,55]

result=list(map(lambda x:x+5,nums))

print(result)

為了將結(jié)果轉(zhuǎn)換為列表,我們使用了list函數(shù)

filter函數(shù)通過刪除與謂詞(一個返回布爾值的函數(shù))不匹配的項來過濾一個迭代

例如:

nums=[11,22,33,44,55]

res=list(filter(lambda x:x%2==0,nums))

print(res)

結(jié)果:

[22,44]

與map一樣,如果要打印結(jié)果.必須將結(jié)果顯式轉(zhuǎn)換為列表.

下個例子:從列表中刪除所有大于4的項目

nums=[1,2,,5,8,0,7,12]

res=list(filter(lambda x:x<5,nums))

print(res)

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多