1.3.2 Python特殊函数

本文深入讲解了Python中的几种特殊函数,包括递归思想的应用、lambda函数的简洁特性、map和reduce函数的强大处理能力以及filter函数的高效过滤机制。通过实例演示了如何利用这些函数简化编程任务。

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

1,递归
递归不是函数,而是一种思想。
>>> def fib(n):
if n==0:
return 0
elif n==1:
return 1
else:
return fib(n-1)+fib(n-2)

>>> fib(3)
2
>>> fib(10)
55
fib(n-1)+fib(n-2)就是又调用了这个函数自己,实现递归。
2,特殊函数
Python是支持多种范型的语言,可以进行所谓的函数式编程,其突出体现在有这么几个函数:
filter、map、reduce、lambda、yield
1) lambda
lambda函数是一个只用一行就能解决问题的函数
>>> def add(x):
x+=3
return x

>>> numbers = range(10)
>>> numbers
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> new_numbers=[]
>>> for i in numbers:
new_numbers.append(add(i))

>>> new_numbers
[3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
在这个例子中,add()只是一个中间操作。
但是,我们可以用lambda这个函数替代add(x):
>>> lam = lambda x:x+3
>>> n2=[]
>>> for i in numbers:
n2.append(lam(i))

>>> n2
[3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
这里的lam就相当于add(x),请对应一下,这一行lambda x:x+3就完成add(x)的三行,特别是最后返回值。
还可以这样用:
>>> g= lambda x,y:x+y
>>> g(2,3)
5
通过上面的例子,总结一下lambda函数的使用方法:
在lambda后面直接跟变量。
变量后面是冒号。
冒号后面是表达式,表达式计算结果就是本函数的返回值。
用一个式子表示: lambda arg1, arg2, ...argN : expression using arguments
2) map
>>> numbers
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> add
<function add at 0x03172AB0>
>>> map (add,numbers) #只引用函数名称add即可
[3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
>>> map (lambda x:x+3,numbers) #用lambda也可以
[3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
map()是Python的一个内置函数,它的基本样式是: map(func, seq)
func是一个函数,seq是一个序列对象。在执行的时候,序列对象中的每个元素,按照从左到右的顺序依次被取出来,塞入到func函数里面,并将func的返回值依次存到一个列表中。
>>> numbers
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> def aa(x):
return x**2

>>> map(aa,numbers)
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
3) reduce
>>> reduce (lambda x,y:x+y,[1,2,3,4,5])
15
>>> reduce (lambda x,y:x+y,[1,2,3])
6
对比一下map()的运算,能更理解reduce()。Map()是上下运算,reduce()是横着逐个元素进行运算。
有两个list,a=[1,2,3],b=[4,5,6],计算:a[0]*b[0]+a[1]*b[1]+...的结果
>>> a=[1,2,3]
>>> b=[4,5,6]
>>> zip(a,b)
[(1, 4), (2, 5), (3, 6)]
>>> sum (x*y for x,y in zip(a,b))
32
>>> reduce ( lambda x,y:x+y, map (lambda x,y:x*y,a,b))
32
4) filter
filter的中文含义是“过滤器”,在Python中,它起到了过滤器的作用。
>>> numbers = range(-5,5)
>>> numbers
[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4]
>>> filter(lambda x:x>0,numbers)
[1, 2, 3, 4]
>>> [x for x in numbers if x>0]
[1, 2, 3, 4]
>>> filter(lambda x : x!='l','hello')
'heo'
这些函数在性能上可能没有多大效果,但是在代码简洁性上还是起很大作用的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值