递归
一个逼格高的求和递归
def mysum(L):
return 0 if not L else L[0] + mysum(L[1:)
用来进行对不定项列表进行累加:
def sum(L):
tot = 0
for x in L:
if not isinstance(x,list): #判断x是子列表还是值,如果是值的话累加,如果是列表的话进入递归,再次判断子列表是否还有子列表,是的话继续递归并且累加所有数值
tot += x
else:
tot += sumtree(x)
return tot
L = [1,[1,[1,[11]]]]]
匿名函数lambda
- lambda函数一般形式是lambda后边是参数加冒号,之后是一个表达式
- lambda是一个语句可以出现在python不允许出现的地方
- lambda主体是一个单个的表达式,而不是一个代码块
# 用法1:lambda和函数进行嵌套
def x():
lambda x: print ('a')
return x
# 用法2:需要一个简单函数时临时创建
for i in range(1,10):
p = (lambda x:x**2 if x/2==0 else x**0.5)
print (p(i))
map
- map函数的作用是遍历序列,对序列的每一个元素进行函数处理
def s1(s):
return s + 'map'
s = "spam"
print (list(map(s1,s))) #['smap', 'pmap', 'amap', 'mmap'] ,看来字符串会做整体处理
print (tuple(map(s1,s))) # ('smap', 'pmap', 'amap', 'mmap')
s = 'sppaam'
print (set(map(s1,s))) # {'amap', 'pmap', 'smap', 'mmap'}
# map和lambda组合处理
s = [1,2,3,4,5,6]
print (map(lambda x:x ** 2,s)) # [1, 4, 9, 16, 25, 36]
filter
- filter的作用就是根据某些条件筛选出符合条件的序列中的元素
reduce函数
- reduce() 函数会对参数序列中元素进行累积。
- 函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。
#在python3中,reduce是functools中的一个函数
from functools import reduce
reduce((lambda x,y:x + y),[1,2,3,4])
lambda和def的区别
- lambda总是可以被def取代,lambda只有一个返回值,不适合较大的函数