python學習筆記-(16)python中的函數對象

函數本質上也是一個對象,因此,既可以賦值給其他的對象名,也可作爲參數傳遞

1. 函數作爲參數(函數名就是一個對象)

def f1(a ,b):

return a + b

def f2(func, a , b):

    print func(a,b)

f2(f1,1,2)

說明:函數f2的參數func就是一個函數對象,調用f2的時候將f1函數對象作爲參數傳遞給func

參考:既然函數名可以作爲參數傳遞,那我們是不是考慮下用一種方法來定義函數呢,python中提供了lambda函數的用法,目的就是來定義函數的。舉例如下:

f = lambda a, b: a + b

print f(1,2)

說明:利用lambda動態生成一個函數對象賦給f,函數參數爲ab,返回值是a+b。這樣生成函數對象是不是很方便呢!以上例子與下面的等價:

def f(a, b):

   return a + b

2. Python 中的map()函數(可以將函數對象依次作用到表的每一個元素)

先來看一個例子:

s = map((lambda i: i +3), [1,2,3])

print s

說明:在這裏,map函數的第一個是一個lambda定義的函數對象,另一個是表。函數的含義就是將表中的每個元素加3之後,返回給表s。概括說map函數的作用是:通過讀入的函數對象來對數據進行操作

3. Pythonfilter函數(可將作爲參數的函數對象作用到元素上)

先來看一個例子:

def f(a):

if a > 10:

   return True

else:

    return False

s = filter(f,[5,12,23,10])

print s

說明:filter函數與map函數相似,第一個參數均爲函數對象。Filter函數中,若函數對象返回的是True,則將當前的元素返回儲存在表中。Filter函數是用來篩選數據的(元素個數可能減少),map函數是用來處理數據的(元素個數不變化)。

4. Python中的reduce函數

先來看一個例子:

s = reduce((lambda a, b: a +b), [1,2,3,4])

print s

說明:reduce函數同以上介紹的兩個函數類似,第一個參數都是函數對象。這這裏,reduce函數的第一個參數是lambda函數(用來接收ab,返回a+b),reduce將表中的前兩個元素12傳遞給lambda函數,得到3,返回值3作爲lambda函數的第一個參數,表中的下一個元素3作爲lambda函數的第二個參數,進行下一次的lambda函數調用,得到6同理,下次得到返回值10,直到表中沒有元素。上面例子等同與數學運算表達式:(( 1 + 2 ) + 3 ) + 4

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章