您的位置:首页 > 编程语言 > Python开发

python函数之二 函数式编程

2014-04-14 13:03 363 查看

python函数之二 函数式编程

1lambda

格式:
lambda [arg1[, arg2, ... argN]]:expression


python允许用lambda关键词创建匿名函数。匿名是因为不需要以标准的方式来声明。一个完整的lambda语句代表了一个表达式,这个表达式的定义体必须和声明放在同一行。参数是可选的。

用合适的表达式调用一个lambda声称一个可以像其他函数一样使用的函数对象。它们可以被传递给其他函数,用额外的引用别名化,作为容器对象以及作为可调用的对象被调用。
>>> def add(x,y):return x + y
... 
>>> add(1,2)
3
>>> addl = lambda x, y: x + y
>>> addl(1,2)
3

>>> add2 = lambda x, y=2: x + y
>>> add2(3)
5
>>> add2(3,4)
7

2内建apply,filter,map,reduce

apply()

apply(func[,nkw][,kw])


用可选的参数来调用func, nkw为非关键字参数,kw为关键字参数。返回值是一个函数调用的返回值。

apply()函数以后会弃用。

filter()

filter(func,seq)


调用一个布尔类型的函数func来遍历seq中的每个元素。返回一个使func返回值为true的元素的序列。
>>> from random import randint
>>> odd = lambda n : n % 2
>>> nums = [ randint(1,100) for i in range(10) ]
>>> nums
[61, 33, 8, 88, 26, 74, 33, 48, 21, 19]

>>> filter(odd,nums)
[61, 33, 33, 21, 19]

map()

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


将函数func作用于给定序列的每一个元素,并用一个列表来提供返回值。
>>> map((lambda x: x+2),[0,1,2,3,4,5])
[2, 3, 4, 5, 6, 7]
>>> map((lambda x: x**2),[0,1,2,3,4,5])
[0, 1, 4, 9, 16, 25]

reduce()

reduce(func,seq[,init])


将二元函数作用于seq序列的元素,每次携带一对(先前的结果和下一个序列元素)。连续的将现有的结果和下一个值作用在获得的随后结果上。如果初始值Init给定,则第一个比较会是在Init和第一个序列元素。

reduce( (lambda x, y: x + y),range(5))


等同于

( ( ( (0 + 1) + 1 ) + 2 ) +3 ) +4


其原理如下:
def reduce(func,seq,init=None):
    lseq = list(seq)
    if init is None:
        res = lseq.pop(0)
    else :
        res = init
    for item in lseq:
        res = func(res,item)
    return res
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: