一、匿名函数
多用于防止数据污染,需要函数进行作用域隔离,但代码复杂度极低并且只需要运行一次的情况
1、匿名函数方式1
利用函数赋值于的变量写入参数值
avg = lambda total,count:total/count
print(avg(12,25))#4.0
print(type(avg(12,3)))#float
2、匿名函数方式2
在匿名函数后面写入参数值
ret=(lambda a,b:a+b)(1,2)
print(ret)#3
print(type(ret))#int
3、携带默认参数的匿名函数
默认参数同普通函数
ret=(lambda a,b,c=3:a+b+c)(1,2)
print(ret)#6
4、匿名函数中不定常参数
同普通函数
f=lambda *args:args
f1=lambda **kwargs:kwargs
print(f(1,2,3,4))
print(f1(a=1))
5、用匿名函数找最大值
在匿名函数中使用if else结构
print((lambda a,b,c:c if c >(a if a>b else b) else (a if a>b else b))(1,22,3))#22
6、字典排序
按照字典中某个键的值进行排序
info_list=[{'a':1,'b':2},{'a':1,'b':1},{'a':1,'b':3}]
info_list.sort(key=lambda x:x['b'])
print(info_list)
二、递归函数
1、n!阶乘
常规写法
n=int(input())
def jie(n):
x=n
while n>1:
x=x*(n-1)
n-=1
return x
print(jie(n))
递归写法
def fact(n):
if n==1:
return 1
return n * fact(n - 1)
print(fact(3))
2、汉诺塔问题
n=int(input())
def ci(n):
if n==1:
return 1
return 2*ci(n-1)+1
print(ci(n))
3、用函数实现,输入某年某月某日,判断这一天是这一年的第几天(闰年考虑在内)
def nian(y):
if ((y%4==0)and(y%100!=0))or(y%400==0):
return -1
else:
return -2
def yue(m):
if m==1:
return 0
elif m<=8:
return +m//2
else:
return +(m+1)//2
while 1:
try:
a=input('请输入年月日(2019-3-7):')
a=a.split('-')
if (len(a)>3)or(m):
int(a)
y=int(a[0])
m=int(a[1])
d=int(a[2])
# ~ print(y,m,d)
if m<=2:
n=30*(m-1)+yue(m)+d
else:
n=30*(m-1)+yue(m)+d+nian(y)
print(n)
except:
print('请输入正确格式')