一、高階函數:把函數做爲參數傳入,這樣的函數稱爲高階函數。函數式編程就是指這種高度抽象的編程範式。css
二、python內建了map() 和 reduce()python
三、map()函數接收兩個參數:一個函數,一個是序列;map將傳入的函數依次做用到序列的每一個元素,並把結果做爲新的list返回編程
Eg:函數f(x)= x2 ,要把這個函數做用在一個list[1,2,3,4,5,6,7,8,9]上,就可使用map實現app
方法一:函數式編程
def f(x):函數
return x*xspa
>map(f,[1,2,3,4,5,6,7,8,9]) [1, 4, 9, 16, 25, 36, 49, 64, 81]
code
方法二:排序
L=[]ip
for n in [1,2,3,4,5,6,7,8,9]:
L.append(f(n))
print L
map()函數計算簡單,能夠計算任意複雜的函數,好比,吧list全部數字轉爲字符串:>map(str,[1,2,3,4,5,6,7,8,9]) ['1', '2', '3', '4', '5', '6', '7', '8', '9']
利用map()
函數,把用戶輸入的不規範的英文名字,變爲首字母大寫,其餘小寫的規範名字。輸入:['adam', 'LISA', 'barT']
,輸出:['Adam', 'Lisa', 'Bart']
四、reduce()把一個函數做用在序列[x1,x2,,,]上,這個函數必須接收兩個參數,reduce把結果繼續和序列的下一個元素作積累計算
def add(x,y):
return x+y
>reduce(add,[1,3,5,7,9]) 25
五、python內建函數 filter() 用於過濾序列。也接收一個函數和序列。
filter()把傳入的函數依次做用於每一個元素,而後根據返回值是 True 仍是 False 決定保留仍是丟棄該元素
Eg:在一個list中,刪除偶數,只保留奇數
def io_odd(n):
return n%2==1
>filter(is_odd,[1,2,4,5,6,9,10,15]) [1,5,9,15]
Eg:把一個序列中的空字符串刪掉
def not_empty(s):
return s and s.strip()
>filter(not_empty,['A',‘ ’,‘B’,‘C’,None,‘ ’]) [‘A’,‘B’,‘C’]
六、python內置的 sorted() 函數能夠對list進行排序;>sorted([36,5,12,9,21]) [5,9,12,21,36]
sorted()函數也是一個高階函數,它能夠接收一個高階函數。還能夠接收一個比較函數來實現自定義的排序
Eg:def reversed_cmp(x,y):
if x>y:
return -1
if x<y:
return 1
if x>y:
return 0
>sorted([36,5,12,9,21]) [36, 21, 12, 9, 5]
Eg:>sorted(['bob', 'about', 'Zoo', 'Credit']) ['Credit', 'Zoo', 'about', 'bob']
默認狀況下,對字符串排序,是按照ASCII的大小比較的
需求:排序忽略大小寫,按照字母排序 分析:實際上就是先把字符串都變成大寫或小寫,再比較
def cmp_ignore_case(s1, s2):
u1 = s1.upper() //upper()方法字符串中的小寫字母轉爲大寫字母,返回全部基於字符被轉換爲大寫的字符串的一個副本;;
u2 = s2.upper() //Eg:
s = "Hello Good Boy Doiido 123456" print s.upper() 結果:HELLO GOOD BOY DOIIDO 123456
if u1 < u2:
return -1
if u1 > u2:
return 1
return 0
>sorted(['bob', 'about', 'Zoo', 'Credit'], cmp_ignore_case) ['about', 'bob', 'Credit', 'Zoo']
七、匿名函數:關鍵字 lambda 表示匿名函數,冒號前面表示 函數參數。匿名函數有個限制,就是隻能有一個表達式,不用寫return,返回值就是該表達式的結果
eg:以map()函數爲例:>map(lambda x:x*x,[1,2,3,4,5,6])