1,递归
递归不是函数,而是一种思想。
def fib(n):
if n0:
return 0
elif n1:
return 1
else:
return fib(n-1)+fib(n-2)
fib(3)
2fib(10)
55
fib(n-1)+fib(n-2)就是又调用了这个函数自己,实现递归。
2,特殊函数
Python是支持多种范型的语言,可以进行所谓的函数式编程,其突出体现在有这么几个函数:
filter、map、reduce、lambda、yield
- 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
版权声明:本文为博主原创文章,转载请附上博文链接!