Day1函數(shù)式編程1/3

高階函數(shù)

map

map()函數(shù)接收兩個(gè)參數(shù),一個(gè)是函數(shù),一個(gè)是Iterable,map將傳入的函數(shù)依次作用到序列的每個(gè)元素,并把結(jié)果作為新的Iterator返回。

>>> list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
['1', '2', '3', '4', '5', '6', '7', '8', '9']

reduce

reduce把一個(gè)函數(shù)作用在一個(gè)序列[x1, x2, x3, ...]上,這個(gè)函數(shù)必須接收兩個(gè)參數(shù),reduce把結(jié)果繼續(xù)和序列的下一個(gè)元素做累積計(jì)算,其效果就是:
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
比方說對(duì)一個(gè)序列求和,就可以用reduce實(shí)現(xiàn):

>>> from functools import reduce:
>>> def add(x, y):
...     return x + y
...
>>> reduce(add, [1, 3, 5, 7, 9])
25

把字符串轉(zhuǎn)化為整數(shù)的函數(shù):

from functools import reduce

DIGITS = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}

def char2num(s):
    return DIGITS[s]

def str2int(s):
    return reduce(lambda x, y: x * 10 + y, map(char2num, s))

strip()方法用于移除字符串頭尾指定的字符(默認(rèn)為空格)。
split()通過指定分隔符對(duì)字符串進(jìn)行切片。

filter

Python內(nèi)建的filter()函數(shù)用于過濾序列。
map()類似,filter()也接收一個(gè)函數(shù)和一個(gè)序列。和map()不同的是,filter()把傳入的函數(shù)依次作用于每個(gè)元素,然后根據(jù)返回值是True還是False決定保留還是丟棄該元素。
filter()函數(shù)返回的是一個(gè)Iterator,也就是一個(gè)惰性序列,所以要強(qiáng)迫filter()完成計(jì)算結(jié)果,需要用list()函數(shù)獲得所有結(jié)果并返回list。

用filter求素?cái)?shù) 埃氏篩法

def _int_iter():#生成器生成從3開始的無限奇數(shù)序列
    n = 1
    while True:
        n = n + 2
        yield n
 
def  _not_divisible(n):#定義篩選函數(shù)
    return lambda x:x % n > 0
 
def primes():
    it = _int_iter()#初始序列
    while True:
        n = next(it)#返回序列的第一個(gè)數(shù)
        yield n
        it = filter(_not_divisible(n), it)#構(gòu)造新序列
for n in primes():#構(gòu)造循環(huán)條件,使之可以輸出任何范圍的素?cái)?shù)序列
    if n < 1000:
        print(n)
    else:
        break

回?cái)?shù)是指從左向右讀和從右向左讀都是一樣的數(shù),例如12321,909。請(qǐng)利用filter()篩選出回?cái)?shù):

def is_palindrome(n):
    return n==int(str(n)[::-1])

sorted

sorted()函數(shù)就可以對(duì)list進(jìn)行排序
此外,sorted()函數(shù)也是一個(gè)高階函數(shù),它還可以接收一個(gè)key函數(shù)來實(shí)現(xiàn)自定義的排序,例如按絕對(duì)值大小排序:

>>> sorted([36, 5, -12, 9, -21], key=abs)
[5, 9, -12, -21, 36]

key指定的函數(shù)將作用于list的每一個(gè)元素上,并根據(jù)key函數(shù)返回的結(jié)果進(jìn)行排序。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 函數(shù)式編程就是一種抽象程度很高的編程范式,純粹的函數(shù)式編程語言編寫的函數(shù)沒有變量,因此,任意一個(gè)函數(shù),只要輸入是確...
    齊天大圣李圣杰閱讀 1,638評(píng)論 0 2
  • 函數(shù)式編程:把函數(shù)作為參數(shù)傳入,這樣的函數(shù)稱為高階函數(shù),函數(shù)式編程就是指這種高度抽象的編程范式。 map/redu...
    Roct閱讀 396評(píng)論 0 0
  • 本系列主要學(xué)習(xí)Python的基本使用和語法知識(shí),后續(xù)可能會(huì)圍繞著AI學(xué)習(xí)展開。Python3 (1) Python...
    猿來如癡閱讀 2,450評(píng)論 0 0
  • 對(duì)黑夜的恐懼已經(jīng)太深,成為一種習(xí)慣。 恐懼無眠,惡性循環(huán)。 人在害怕的時(shí)候就想著尋求依靠,比如我特別想你陪著我睡覺...
    驚鴻入夢(mèng)閱讀 172評(píng)論 0 0
  • 我叫小宇,是一縷游魂;因?yàn)槲覑鄣娜耍粣畚?,而我又無法放下,對(duì)他的癡念讓我瘋魔。 這樣子的我,很可怕;我不知道自...
    獨(dú)孤因果閱讀 785評(píng)論 1 1

友情鏈接更多精彩內(nèi)容