python学习自记录(11)Python中的一些特殊函数

1,递归
递归不是函数,而是一种思想。

def fib(n):
if n0:
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

3.map(map函数不改变原有的list,只是返回一个新的list)

numbers
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

add
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]

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’
这些函数在性能上可能没有多大效果,但是在代码简洁性上还是起很大作用的


作者:心雨先生
来源:CSDN
原文:https://blog.csdn.net/u011418530/article/details/79636480
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值