三元运算、递归、匿名函数

三元运算

  三元运算:就是if ...else的语法糖,但是前提if和else都要存在且都只有一条语句。

  例   a=20

    b=30

    re= a if a>b esle b    #求最大值

    print(res)

  上面的结果,也可以和条件没有直接性的关系。

推导式

 ①dic={‘a’:1,‘b’:2,‘c’:3}

  res=[(k,v)for k,v in dic.items()]    #列表推导式

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

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

  print(res)   #得到的是一个生成器,与列表不同,因为原元组是不可变得,所以得到的是一个生成器,要想得到一个元组可以tuple(res)转换后输出

 ③ls= [(‘a’,1),('b',2),(‘c’,3)]

  res={k:v for k,v in ls}  #字典推导式

  print(res)

  同理可以把可迭代的对象推导成想要的类型

递归

  递归的本质就是自己调用自己(函数的自我调用,循环调用可以是直接也可以是间接的)

  ps:在调用函数的时候后会产生局部的名称空间,占用内存,python的内存管理机制会防止其无限制占用内存,对函数的递归做了最大的层级限制。

  import sys

  sys.getrecursionlimit()

  sys.getrecursionlimit(2000)#提高限制到2000,默认为1000

递归的调用阶段  

  递归:回溯和递推

    ①回溯:询问答案的过程

      就是从外层一层一层的递归调用下去,回溯阶段必须有明确的结束条件,每进入下一次递归,问题的规模应该有所减少。

    ②递推:推出答案的过程

      递推就是由内而外一层一层结束递归。

  注:python中没有尾递归优化(就是return自己,并不会减少占用)

匿名函数

  匿名就是没有名字的函数,一次性使用,随时定义(也可以将匿名函数赋值给一个变量名,等同于有名字的函数,但是就违背了初衷)通常配合内置函数使用。

 

posted @ 2019-04-04 15:53  Mr-Bear  阅读(98)  评论(0编辑  收藏  举报