Python入门
DAY 12
今日内容:函数递归,三元表达式,列表生成式,字典生成式,匿名函数
函数递归的调用
1.什么是函数递归
函数的递归调用是函数嵌套调用的一种特殊形式,在调用一个函数的过程中又直接或者间接地调用该函数
本身,称之为函数的递归调用递归调用必须有两个明确的阶段:
1. 回溯: 一次次递归调用下去,说白了就一个重复的过程,但需要注意的是每一次重复问题的规模都应该有所减少,直到逼近一个最终的结果,即回溯阶段一定要有一个明确的结束条件
2. 递推: 往回一层一层推算出结果列如:打印出 l=[1,[2,[3,[4,[5,[6,[7,[8,[9,[10,[11,]]]]]]]]]]] 该列表中的每一个,想象一下如果我们使用if 和 for 来 进行打印的话,代码将会多麻烦,需要套用一层又一层的for 和 if 但是函数的递归调用就能很好的解决这一个问题,代码如下:
l=[1,[2,[3,[4,[5,[6,[7,[8,[9,[10,[11,]]]]]]]]]]] def search(l): for item in l: if type(item) is not list: # 不是列表直接打印 print(item) else: # 判断是列表则继续循环,判断... search(item) search(l)
三元表达式
三元表达式实现的效果就是:条件成立的情况下返回一个值,不成立的情况下返回另外一种值
列如:#res="NICE" if name == 'lqz' else "NB"
name=input('your name: ').strip() res="NICE" if name == 'lqz' else "NB" print(res)
列表生成式
可以简单的改写一个列表,可以对比一下上面和下面的代码,两边的代码效果是相同的,效果就是在每个列表项后面加上一个hello
# names=['lxx','yxx','yyy','fmm'] # l=[] # for name in names: # res=name + '_hello' # l.append(res) # print(l)
# names=['lxx','yxx','yyy','fmm'] # l=[name + '_hello' for name in names] # print(l)
相比之下使用列表生成式相对来说简洁多了
字典生成式
字典生成式和列表生成式相差无几,还是来对比一下就清楚了,以下代码效果是将2个列表合成一个字典
keys=['name','age','sex'] vals=['egon',18,'male'] dic={} for i,k in enumerate(keys): dic[k]=vals[i] print(dic)
keys=['name','age','sex'] vals=['egon',18,'male'] dic={k:vals[i] for i,k in enumerate(keys)} print(dic)
匿名函数
1 什么是匿名函数:就是没有名字的函数
2 为何要用:用于仅仅临时使用一次的场景,没有重复使用的需求
写一个简单的匿名函数
lambda x,y:x+y
匿名函数可以与内置函数结合使用
max,min,sorted,map,filter,reduce列如:
salaries={
'name1':300000,
'name2':100000000,
'name3':10000,
'name4':2000
}
# 求薪资最高的那个人名:即比较的是value,但取结果是key# 可以通过max函数的key参数来改变max函数的比较依据,运行原理:
# max函数会“for循环”出一个值,然后将该值传给key指定的函数
# 调用key指定的函数,将拿到的返回值当作比较依据一般的方法
# def func(name): # # 返回一个人的薪资 # return salaries[name] # # res=max(salaries,key=func) #'egon' # print(res)
使用匿名函数与内置函数结合
# res=max(salaries,key=lambda name:salaries[name]) # print(res)
以上为本次学习的内容,如有疑问欢迎一起探讨