函數式編程

一、高階函數:把函數做爲參數傳入,這樣的函數稱爲高階函數。函數式編程就是指這種高度抽象的編程範式。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])

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息