python函数之二 函数式编程

本文介绍了Python中的函数式编程概念,重点讲解了lambda表达式的使用方法及其与传统函数的区别。此外,还详细探讨了内建函数apply(已弃用)、filter、map及reduce的应用场景与实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值