一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

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表達式

正常創(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表達式?jīng)]有命名函數(shù)強大.它們只能做單一表達的事情--通常相當于一行代碼

例如:

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)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    国产一级内射麻豆91| 五月天婷亚洲天婷综合网| 国产免费无遮挡精品视频| 出差被公高潮久久中文字幕| 国产91麻豆精品成人区| 丰满人妻一二三区av| 九九九热视频最新在线| 日韩18一区二区三区| 日韩偷拍精品一区二区三区| 欧美又黑又粗大又硬又爽| 日本午夜福利视频免费观看| 日韩在线一区中文字幕| 精品亚洲香蕉久久综合网| 精品日韩av一区二区三区| 丰满少妇被粗大猛烈进出视频| 在线观看免费无遮挡大尺度视频 | 国内自拍偷拍福利视频| 亚洲精品一区二区三区日韩| 精品日韩国产高清毛片| 亚洲一区二区精品国产av| 国产欧美另类激情久久久| 91欧美亚洲视频在线| 精品国产日韩一区三区| 国产精品一级香蕉一区| 黄片免费观看一区二区| 国产精品午夜视频免费观看| 开心五月激情综合婷婷色| 一区二区三区四区亚洲另类| 午夜福利92在线观看| 中文字幕亚洲人妻在线视频| 六月丁香六月综合缴情| 国产自拍欧美日韩在线观看| 久久99青青精品免费| 国产免费一区二区三区不卡| 亚洲乱妇熟女爽的高潮片| 在线观看视频国产你懂的| 色婷婷成人精品综合一区| 日韩av欧美中文字幕| 国产一区在线免费国产一区| 亚洲欧美日韩网友自拍| 好吊日视频这里都是精品|