DAY14 函数(三)

一.三元表达式

  三元运算符:就是if...else...的语法糖但是只支持只有一条if...else...语句的判断

  原:

    cmd = input('cmd:')

    if cmd.isdigit():

      print('可转化为数字')

    else:

      print('不可转化为数字')

  三元表达式简化:

    cmd = input('cmd:')

    print('可转化为数字') if cmd.isdigit() else print('不可转化为数字') 

  案例:得到两数大值

    a = 20

    b = 40

    res = a if a > b else 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)]

    字典推导式:

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

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

    print(res)

    # {'a': 1, 'b': 2, 'c': 3}

    案例:

      range(10)推导为列表:

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

      print(res_ls)

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

      res_dic = {v:k for k,v in enumerate('abd')}

      print(res_dic)

 

三.递归

  递归的定义:

    递归:回溯与递推

    回溯:询问答案的过程

    递推:推出答案的过程

  递归前提:

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

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

  递归的本质:

    函数的自我调用(自己调用自己)

  递归深度:

    递归不是无限的系统默认的递归次数为:1000

    可以通过sys模块手动设置,查询递归深度

      sys.setrecursionlimit(100) # 手动设置递归深度

      sys.getrecursionlimit() # 查询递归深度

  递归的两种方式:

    自己调用自己:

    count = 0 

    def a():

      global count

      count += 1

      if count > 50:

        return

      a()

    a()

    函数间接调用自己:一旦形成循环调用,就产生了递归

    def b():

      c()

    def c():

      d()

    def d():

      b()

    b()

    案例: 

      询问第一个人年龄,回溯条件 小两岁,第五个人说出自己的年龄,推导出第一个人年龄
      条件:下一个人的年龄比这个人年纪大两岁
      def get_age(num): # 得到年龄
        if num == 1:
          return 58
        age = get_age(num - 1) - 2
        return age
      res = get_age(5)
      print(res)

      阶乘
      5! = 5 * 4! 4! = 4 * 3! ... 2! = 2 * 1
      def factorial(num):
        if num == 1:
          return 1
        temp = num * factorial(num - 1)
        return temp
      res = factorial(5)
      print(res)

 

四.匿名函数

  匿名函数:没有函数名,没有函数体,只有一个返回值

  关键字:lambda | 参数列表省略() |返回值return关键字也被省略

    f = lambda x,y: (x+y,x-y)

  应用场景:

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

    2.结合内置函数来使用:内置函数某些参数需要一个函数地址

      可以赋值一个有名函数名,也可以直接赋值匿名函数

      案例:

      ls = [100, 200, 50, 10]
      res = max(ls, key=fn)
      print('------------------------')
      print(res)

      res1 = max(ls, key=lambda ele: ele)
      print(res1)

 

  

 

  

    

        

        

posted @ 2019-04-04 16:04  Lip&Hip  阅读(138)  评论(0编辑  收藏  举报