天天看點

python高階函數和匿名函數

1.高階函數

把函數當成一個參數的函數

例子:

abs函數作為一個參數

def add(a,b,f):

   return f(a) + f(b)

print (add(10,-10,abs))

結果:

20

常用内置高階函數

1)map()函數:接收一個函數和清單,并将清單的值傳給函數,最後将結果以清單形式輸出

def power(x):

   return x*x

list1=[1,2,3,4,5,6,7,8,9,10]

print map(power,list1)

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

2)reduce()函數:和map()類似,也是内置高階函數,但函數f需接收兩個變量;第二次調用把list中第一次處理的值(list中第1和第2個參數之和),當做第1個參數繼續,依次類推

def add(x,y):

   return x+y

list1=[1,2,3,4,5,6]

print reduce(add,list1)

21

3)filter()函數:類似map(),根據f函數傳回的True或者False,過濾值,最後輸出清單

def is_even(x):

   return x%2 == 0

list1 = [1,2,3,4,5,6,7,8,9,10]

print filter(is_even,list1)

[2, 4, 6, 8, 10]

4) sorted()函數:傳回一個經過排序的清單

sorted(...)

    sorted(iterable, cmp=None, key=None,reverse=False) --> new sorted list

三個可選參數:

cmp:指定一個定制的比較函數,這個函數接收兩個參數(iterable的元素),如果第一個參數小于第二個參數,傳回一個負數;如果第一個參數等于第二個參數,傳回零;如果第一個參數大于第二個參數,傳回一個正數。預設值為None。

key:指定接收一個參數的函數,這個函數用于從每個元素中提取一個用于比較的關鍵字。預設值為None。

reverse:是一個布爾值。如果設定為True,清單元素将被倒序排列。

mm = dict(a=1,b=3,c=2)

print (mm)

for i in mm:

   print (i)

for j in mm.iteritems():

   print(j)

test = sorted(mm.iteritems(), key=lambda x:x[1])

print(test)

{'a': 1, 'c': 2, 'b': 3}

a

c

b

('a', 1)

('c', 2)

('b', 3)

[('a', 1), ('c', 2), ('b', 3)]

說明:lambda x:x[1] 為匿名函數

2.匿名函數

沒有名字,可以快速定義單行的最小函數

f = lambda x,y:x*y

print f(10,20)

200

本文轉自 huangzp168 51CTO部落格,原文連結:http://blog.51cto.com/huangzp/1978596,如需轉載請自行聯系原作者