zoukankan      html  css  js  c++  java
  • 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)

      

      

        

            

            

  • 相关阅读:
    面向对象之三个基本特征(javaScript)
    webpack初探
    浅谈Promise
    Vue Mixin 与微信小程序 Mixins 应用
    C#入门基础语法知识点总结(变量、运算符、类型转换)
    C#入门基础语法知识点总结(.NET开发环境及代码编写规范)
    触发器练习三
    触发器练习二
    触发器练习一
    存储过程练习二
  • 原文地址:https://www.cnblogs.com/majingjie/p/10655366.html
Copyright © 2011-2022 走看看