Python中經常使用的高階函數

lambda

當在使用一些函數的時候,咱們不須要顯式定義函數名稱,直接傳入lambda匿名函數便可。lambda匿名函數一般和其餘函數搭配使用。
好比能夠直接使用以下的lambda表達式計算當x=3時,y = x * 3 + 5的函數值。函數

In [1]: (lambda x: x * 3 + 5)(3)
Out[1]: 14

map

map函數將一個函數和序列/迭代器(能夠傳入多個)做爲參數,應用函數到序列中的每一個元素,返回一個迭代器。測試

In [4]: a = list(range(5))
In [5]: b = list(range(2, 7))

# 結合lambda匿名函數,對a列表中的每一個元素,計算x * 3 + 5的函數值
In [6]: list(map(lambda x: x * 3 + 5, a))
Out[6]: [5, 8, 11, 14, 17]

In [9]: def add(x, y):
   ...:     return x+y

# 傳入多個序列,a、b兩個序列中的對應元素依次傳入函數add中進行計算
# Note: a、b兩個序列的長度能夠不相等
In [10]: list(map(add, a, b))
Out[10]: [2, 4, 6, 8, 10]

filter

filter函數(filter(func, seq))藉助一個函數來測試序列/迭代器中每一個元素的真假,返回一個過濾後的迭代器。code

In [18]: a = list(range(5))

In [19]: def isodd(number):
    ...:     if number % 2 == 0:
    ...:         return False
    ...:     return True
    ...:

In [20]: filter(isodd, a)
Out[20]: <filter at 0x1a6dc460748>

# 過濾掉全部偶數
In [21]: list(filter(isodd, a))
Out[21]: [1, 3]

reduce

reduce函數傳入一個函數和序列/迭代器,它將滾動計算序列中元素,返回單個結果。例如要計算一個列表全部元素的和。排序

In [23]: from functools import reduce
In [24]: a = list(range(5))

In [25]: sum = reduce((lambda x, y: x + y), a)

In [26]: sum
Out[26]: 10

sorted

sorted(iter, key, reverse=False), 高級排序函數,能夠根據key實現自定義排序。reverse=False表示默認排序結果升序。字符串

# 好比按照a中每一個字符串最後的數字大小,降序排序
In [30]: a
Out[30]: ['fasad_2', 'fadfc_4', '7hdc_0', 'ncsl_1', 'fai_3']

In [32]: sorted(a, key=lambda x: int(x[x.rindex('_') + 1:]), reverse=True)
Out[32]: ['fadfc_4', 'fai_3', 'fasad_2', 'ncsl_1', '7hdc_0']
相關文章
相關標籤/搜索