Python函数式编程

jopen 10年前

1, lambda

lambda可以创建匿名函数,一个完整的lambda表达式格式如下:

lambda [arg1[, arg2, ... argN]]: 返回值

lambda表达式返回一个可调用的函数对象。

>>> func = lambda x:x*2  >>> func  <function <lambda> at 0x01E2E130>  >>> func(3)  6

有默认参数的lambda表达式:

>>> func = lambda a,b = 2: a + b  >>> func(1)  3  >>> func(1,3)  4

变长参数的lambda表达式:

>>> func = lambda *a: [it * 2 for it in a]  >>> func(1,3)  [2, 6]

2.filter

filter用法如下:

filter(func, seq)

bool 函数func作用于seq序列中的每一个元素,返回一个使func为True的的序列

>>> func = lambda a: a%2  >>> filter(None,(1,2,3,4))  (1, 2, 3, 4)  >>> filter(func,(1,2,3,4))  (1, 3)

3.map

map的用法如下:

map(func, seq1[,seq2...])

map将函数func作用于seq序列的每个元素上,返回一个func函数返回值的列表。

>>> func = lambda a: a*2  >>> map(func, (1,2, 3))  [2, 4, 6]  >>> map(None, (1,2, 3))  [1, 2, 3]

map参数有多个序列时,依次取出各个序列的第i个元素,组成元组,func作用于该元组,返回func返回值的列表。

>>> map(lambda a, b: a+b, (1,2,3), (1,1,1))  [2, 3, 4]

4.reduce

reduce的用法如下:

reduce(func, seq)

reduce将二元函数func作用于seq序列,首先func作用于的序列的前两个元素,得到func的返回值和第三个元素再被func作用,直到完成整个序列。

>>> reduce(lambda a, b: a+b, (1,2,3))  6