国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

Python學習總結(jié)之五--入門函數(shù)式編程

2019-11-14 17:10:04
字體:
供稿:網(wǎng)友

函數(shù)式編程

最近對Python的學習有些怠慢,最近的學習態(tài)度和學習效率確實很不好,目前這種病況正在好轉(zhuǎn)。

今天,我把之前學過的Python中函數(shù)式編程簡單總結(jié)一下,分享給大家,也歡迎并感謝大家提出意見。

首先,我們學習函數(shù)式編程時,需要知道一個概念:高階函數(shù)。那么到底什么是高階函數(shù)呢?把函數(shù)作為參數(shù)傳入,這樣的函數(shù)就稱為高階函數(shù)。而函數(shù)式編程就是指這種高度抽象的編程范式。

正文

接下來,我簡單介紹以下四種函數(shù)的用法:map/reduce   filter   sorted   lambda

在這里,map/reduce并不是分布式系統(tǒng)中的map/reduce,而是Python中內(nèi)建的map()函數(shù)和reduce()函數(shù)。

map:我們在使用map函數(shù)時候,map函數(shù)需要接收兩個參數(shù),第一個參數(shù)是函數(shù),第二個參數(shù)是序列,那么表示的含義就是map將傳入的函數(shù)依次作用在序列中的每一個元素,并把結(jié)果以列表的形式返回。

1 def f(x):2     return x*x3 4 PRint map(f,[1,2,3,4,5,6,7,8,9,10])

結(jié)果可想而知了:

看到這里,你會不會有不屑意味,我干嘛非得用map函數(shù)啊,直接寫一個函數(shù),然后調(diào)用即可了啊。不錯,這樣寫肯定沒錯滴,但是會不會有些麻煩呀。看下面的代碼

1 def fuc(x):2     return x*x 3     4 L = []5 for num in [1,2,3,4,5,6,7,8,9,10]:6     L.append(fuc(num))7 print L

reduce:reduce函數(shù)和map函數(shù)有什么不同之處呢?reduce函數(shù)也需要兩個參數(shù):函數(shù)和序列。reduce參數(shù)中的函數(shù)必須接收兩個參數(shù),那么reduce函數(shù)表示的含義則為把返回的結(jié)果繼續(xù)和序列的下一個元素做累積計算,典型例子比如對序列求和。

1 def f2(x,y):2     return x+y 3     4 print reduce(f2,[1,2,3,4,5,6,7,8,9,10])

想到reduce的定義,我們還可以用reduce來解決一個蛋疼無比的問題,那就是把序列變?yōu)檎麛?shù),比如[1,2,3,4,5]變?yōu)?2345。

1 def fn(x,y):2     return x*10+y 3     4 print reduce(fn,[1,2,3,4,5,6,7,8])

filter:filter函數(shù)用于過濾序列中某些元素。和map、reduce函數(shù)一樣,filter也接收一個函數(shù)和一個序列,不同的是,filter把傳入的函數(shù)參數(shù)作用于序列中每一個元素,然后根據(jù)返回值判斷是true還是false來決定該元素是否被丟棄。

1 def isEven(x):2     return x%2==03     4 print filter(isEven,[1,2,3,4,5,6,7,8,9,10])

sorted:sorted函數(shù)用于對序列排序,這個函數(shù)之前的Python總結(jié)里多次提到,這里我簡單說一下通常的規(guī)定吧:對于兩個元素x和y,如果x<y,返回-1,如果x>y ,返回1,如果x==y,返回0。這樣默認的規(guī)定下,我們排序的結(jié)果是從小到大排序的,所以如果想得到從大到小的結(jié)果,我們需要重寫sorted函數(shù)的規(guī)定,這個和C++是一樣的道理吧,就不貼代碼了,自己邊擼邊悟吧。

lambda:便利強大的lambda函數(shù)又稱為匿名函數(shù),它不需要顯式的定義函數(shù),但是匿名函數(shù)也有一些限制,就是只能有一個表達式,不用寫return,返回值就是該表達式的結(jié)果。

 

1 print map(lambda x : x*x , [1,2,3,4,5,6,7,8,9,10])2 ff = lambda x : x*x*x 3 print ff(5)

 

 

匿名函數(shù)也是有很多優(yōu)點的,要不然怎么會使用它呢。第一,函數(shù)沒有名字,不必擔心有函數(shù)名沖突;第二,匿名函數(shù)是一個函數(shù)對象,也可以把匿名函數(shù)賦值給一個變量,然后利用變量來調(diào)用函數(shù)。

 


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 祁阳县| 和静县| 赞皇县| 南通市| 荆门市| 新闻| 高雄市| 怀宁县| 南郑县| 余姚市| 左贡县| 娱乐| 行唐县| 顺义区| 阳高县| 东明县| 湘乡市| 孟州市| 通渭县| 揭西县| 石城县| 赤峰市| 台东市| 紫金县| 武邑县| 浏阳市| 平安县| 兴城市| 漠河县| 宝应县| 安达市| 昂仁县| 固镇县| 菏泽市| 星子县| 库尔勒市| 平昌县| 深水埗区| 普兰县| 庆城县| 乐清市|