函数本质上也是一个对象,因此,既可以赋值给其他的对象名,也可作为参数传递。

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,函数参数为a和b,返回值是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. Python的filter函数(可将作为参数的函数对象作用到元素上)

先来看一个例子:

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函数(用来接收a,b,返回a+b),reduce将表中的前两个元素1和2传递给lambda函数,得到3,返回值3作为lambda函数的第一个参数,表中的下一个元素3作为lambda函数的第二个参数,进行下一次的lambda函数调用,得到6。同理,下次得到返回值10,直到表中没有元素。上面例子等同与数学运算表达式:(( 1 + 2 ) + 3 ) + 4