#python入門6#函數式編程

map/reduce:
  • map():函數接收兩個參數,一個是函數,一個是Iterable,map將傳入的函數依次作用到序列的每個元素,并把結果作為新的Iterator返回。
  • reduce:把一個函數作用在一個序列[x1, x2, x3, ...]上,這個函數必須接收兩個參數,reduce把結果繼續和序列的下一個元素做累積計算

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

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

序列求和key再簡化:(使用 lambda)

>>> from functool import reduce
>>> reduce(lambda x,y:x+y, [1,3,5,7,9])
25
filter():
  • filter():filter()也接收一個函數和一個序列。和map()不同的是,filter()把傳入的函數依次作用于每個元素,然后根據返回值是True還是False決定保留還是丟棄該元素
  def is_odd(n):
        return n%2 == 1

  list(filter(is_odd, [1,2,3,4,5,6,7,8,9,10]))
[1, 3, 5, 7, 9] 

filter()函數返回的是一個Iterator,也就是一個惰性序列,所以要強迫filter()完成計算結果,需要用list()函數獲得所有結果并返回list

sorted():
  • sorted():可以對list進行排序,同時也是一個高階函數,它還可以接收一個key函數來實現自定義的排序
#簡單用法:
>>> sorted([36,5,-12,-5,9])
[-12, -5, 5, 9, 36]
#高階使用:
>>> sorted([36, 5, -12, 9, -21], key=abs)
[5, 9, -12, -21, 36]
#key指定的函數將作用于list的每一個元素上,并根據key函數返回的結果進行排序。對比原始的list和經過key=abs, 處理過的list:
list = [36, 5, -12, 9, -21]
keys = [36, 5, 12, 9, 21]
#然后sorted()函數按照keys進行排序,并按照對應關系返回list相應的元素:
keys排序結果 => [5, 9, 12, 21, 36]
                              |   |    |      |     |
最終結果         => [5, 9, -12, -21, 36]
#忽略大小寫,給字母排序:
>>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower)
['about', 'bob', 'Credit', 'Zoo']
學習來源于廖雪峰教程
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容