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))