python函數式編程部分總結筆記(一)

1.什麼是函數式編程?

    大概是——function,是一種編程範式,最貼近於計算。特點有:

    a.把計算視爲函數而非指令,b.純函數式編程:不需要變量,沒有副作用,測試簡單。c.支持高階函數,代碼簡潔。

    python支持的函數式編程

        a.不是純函數式編程,允許有變量

        b.支持高階函數:允許函數作爲變量傳入

        c.支持閉包,有了閉包就能返回函數

        d.有限度地支持匿名函數

2.變量可以指向函數

        直接寫一個函數,例如:abs(絕對值函數),此時它返回的是一個函數對象。

        再定義一個變量f,f指向一個函數f=abs,f=(-20)  

        這說明:變量可以指向一個函數,直接可以對這個函數進行調用。和直接對這個函數調用的效果是一樣的。

函數名其實就是指向函數的變量

        abs

        abs=len(指向len函數)

        函數名是abs,指向的是len函數,在這裏函數名與普通變量沒有什麼區別。只不過它指向的是一個函數。

高階函數:能夠接收函數做參數的函數


例如:

        def add (x,y,f):

               return f(x)+f(y)

         add(-5,9,abs)

      這裏根據函數的定義,執行的代碼其實是:abs(-5)+abs(9)


3.python中map()函數

        map()是python內置的高階函數,它接收一個函數f和一個list,並通過把函數f作用在lis的每個元素上,得到一個新的list 並返回。

       注意:map()函數作用後是得到一個新的list並返回,不是原來的list了。

    例如:

        def f_pingf(x):

                return x*x

        print map(f_pingf,[1,2,3,4,5])


4.python中的reduce()函數

        reduce()也是python內置的高階函數,它同樣接收一個函數f和一個list,不同的是:reduce接收的f函數必須傳入兩個參數,reduce()對list的每個元素反覆調用f函數,並返回最終結果值。

        def f(x,y):

        return f(x)+f(y)

        print reduce(f,[1,2,3,4,5,6,7,8])

        reduce()還可以接收第三個可選參數,作爲計算的初始值。

        例如:reduce(f,[1,2,3,4,5,6],100) 的意思即爲:100+1+2+3+4+5+6=121


5.python中的filter()函數

filter()函數也是python內置的高階函數,接受一個函數f和一個list;f的作用是對每個元素進行判斷,返回True或false,filter()根據函數f的判斷自動清除去掉不符合條件的數據,返回的是由符合條件的元素組成的新的list。

注意: s.strip(rm) 刪除 s 字符串中開頭、結尾處的 rm 序列的字符。

當rm爲空時,默認刪除空白符(包括'\n', '\r', '\t', ' '),如下:

a = '     123'
a.strip()

例如:

請利用filter()過濾出1~100中平方根是整數的數,即結果應該是:

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

def is_sqrt(x):

    r = (int)math.sqrt(x)

    return r*r==x

print filter(is_sqrt,range(1,101))


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章