Python入门学习 DAY12 函数递归

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)

以上为本次学习的内容,如有疑问欢迎一起探讨

猜你喜欢

转载自blog.csdn.net/sql121407/article/details/81367205
今日推荐