递归,匿名函数

一、三元运算符

三元运算符也称三目运算符,就是if .....else.....语法糖

前提:if 和 else 只有一条语句

例:a = 20

       b = 30

       res = a if a > b else b     #求最大值

三元运算符的结果不一定要与条件直接有关系

二、推导式:列表(元组)与字典的转换语法糖

1、列表(元组)推导式

dic = {'a':1,'b':2,'c':3}

res = [(k, v) for k , v in dic .items()]

print(res)                                         #[('a',1),('b',2),('c',3)]

元组直接在得到的列表的基础上tuple转一下就可以了

2、字典推导式

l = [('a',1),('b',2),('c',3)] 

res = {k: v for k ,v in l}

print res                                          #dic = {'a':1,'b':2,'c':3}

案例:

range 可以被推导为列表

res_ls = [arg for arg in range(10)]

print(res)                                          # [0,1,2,3,4,5,6,7,8,9]

迭代出可解压为单列容器的就可以推导出字典

res_dic = {v: k for k, v in enumrate('abc')}

print(res_dic)                                   #{'a': 0 , 'b' : 1 , 'c' : 2}

3、列表推导式格式:

[k for k in iter if 筛选条件]

三、递归:回溯与递推

回溯:询问答案的过程

递推:推出答案的过程

1、前提:

             回溯到一个有具体结果的值,开始递推

             回溯与递推的条件要有规律

2、递归本质:函数的自我调用

def a():

      global count

       count += 1

       if count > 50:

              return 

       a()

a()                                 #自己调自己

 

 

def b():

      c()

def c():

      d()

def d():

      b()

b()                                #间接调自己,一旦形成循环调用,就产生了递归

四、匿名函数:没有名字的函数,没有函数体,只有一个返回值

语法:lambda  参数列表  一个返回值表达式

           lambda x,y : x + y

应用场景:

          1、匿名函数函数地址可以被一个变量接受,该变量就可以作为函数名来使用,但就违背了匿名的初衷

           2、结合内置函数来使用:内置函数某些参数需要一个函数地址,可以赋值一个有名函数名,也可以直接赋值匿名函数

原文地址:https://www.cnblogs.com/yanminggang/p/10655041.html