zoukankan      html  css  js  c++  java
  • 第十三天

    今日内容

    一、三元表达式

    1.1便利双分支表达(if,elif)

      例1:
            x = 11 y = 22
                    (判断的条件)
            res = x if x >y elif y
         (条件成功返回的值) (条件不成功返回的值)
            print(res)
    

    二、生成式

    2.1列表生成式

      例1:创建一个0-9的列表
          for循环:
            l = []
            for i in range(10)
                l.append(i)
            print(l)
          
            列表生成式:
            l = [i for i in range(10)]
      
      例2:在0-9的列表中只取大于5的数字放进列表
          for循环:
            l = []
            for i in range(10):
              if i > 5:
                  l.append(i)
            print(l)
    
           列表生成式:
            l = [i for i in range(10) if i>5]
            print(l)
    
      例3:往列表中名字加上后缀
            for循环:
            names = ["lxx","hxx","wxx","lili"]
            l = []
            for name in names:
                l.append(name+"_sb"]
            print(l)
    
            列表生成式:
            l = [name+"_sb" for name in names]
            print(l)
    
      例4:按条件过滤出列表内容
            names = ["egon","lxx_sb","hxx_sb","wxx_sb"]
            res = [name for name in names if name.endswith("sb")]
            print(res)
    

    2.2字典生成式

      模板:
         例1:
          res = {i:i**2 for i in range(5)}
          print(res)
    
         例2:
          items = [("k1",111),("k2",222),("k3",333)]
          print(dict(items))
          print({k:v for k,v in items})
    

    2.3集合生成式

      模板:
          res = {i for i in range(5)}
          print(res)
    

    2.4生成器表达式

      模板:
          res = (i for i in range(3))     # 创建一个生成器
          print(next(res))
          print(next(res))
          print(next(res))
    
      例1:当文件很大时计算文件中字符的个数
          with open("a.txt",mode="rt",encoding="utf-8") as f:
            res = sum(len(line) for line in f)  #sum:将列表中的数字相加起来
            print(res)
    

    三、函数递归

    3.1函数的递归调用

      解释:在调用一个函数的内部又调用自己,所以递归调用的本质就是一个循环的过程
      例1:不能无限循环,当递归深度达到1000层时会自动停止,因为如果无限循环会生成无数个内存空间让电脑死机。
          def func():
            print("func")
            func()
          func()
    
      ps:如何让递归深度增加(深度越高,风险越大)
          import sys
          sys.setrecursionlimit(2000)
          print(sys.getrecursionlimit())
    
          大前提:递归一定要在某一层结束
          递归的两个阶段:
            1、回溯:往下一层一层挖井
            2、递推:往上一层一层返回
            例1:推断age(5)的值
              def age(n):
                  if n == 1:
                    return 18
                  return age(n-1) + 10
              res = age(5)
              print(res)
    
            例2:取出列表中所有的数字
              nums = [1,[2,[3,[4,[5,[6]]]]]]
              def get(l):
                    for num in l:
                      if type(num) is list:
                        get(num)
                      else:
                        print(num)
              get(nums)
    
            例3:推断目标数字是否在列表中(二分法取值)
              nums = [-3,-2,-1,0,1,3,4,5,7,19]
              find_num = 2
              def find(nums,find_num):
                if len(nums) == 0:
                  print("not num")
                  return
                mid_index = len(nums) // 2
                if find_num > num[mid_dinex]:
                        find(nums[mid_index+1:],find_num)
                elif find_num < nums[mid_index]:
                        find(nums[:mid_index],find_num)
                else:
                  print("get num")
              find(nums,find_num)
    

    四、匿名函数

    匿名函数的定义:

      没有名字的函数
      例1:算两个值的合
          有名函数:
            def f(x,y):
                return x+y
            f(x,y)
          匿名函数:lambda
            lambda x,y:x+y   #匿名函数的定义
            
      例2:取出字典中薪资最高的人的名字(max)
            salaries = {
                        "egon":3000,
                        "tom":10000,
                        "zxx":1000
                        }
            print(max(salaries,key=lambda k:salaries[k]))  #取出字典中薪资最高人的名字
            print(min(salaries,key=lambda k:salaries[k]))  #取出字典中薪资最低人的名字
            print(sorted(salaries,key=lambda k:salaries[k]))  #以薪资从低到高的人名排序
            print(sorted(salaries,key=lambda k:salaries[k],reverse=True))  #以薪资从高到低的人名排序
    

    五、匿名函数(了解)

    5.1map

      把一个列表通过某个条件变成一个迭代器列表
      将下列表中所有元素加上"_sb"为后缀
      names = ["lxx","hxx","wxx","lili"]
      列表生成式:
      l = [name + "_sb" for name in names]    #换成小括号则列表变成迭代器
      map方式:
      res = map(lambda name:name + "sb" ,naems)
      print(list(res))
    

    5.2filter

      把列表通过某种条件过滤成迭代器
      将下列表中后缀为sb的元素过滤出来
      names = ["lxx_sb","egon","wxx_sb","lili_sb"]
      列表生成式:
      print([name for name in names if name.endwith("sb")])
      filter方式
      res = filter(lambda name:name.endswith("sb"),names)
    

    5.3reduce

      将列表里的值合并起来
      from functools import reduce
      res = reduce(lambda x,y:x+y,[1,2,3])
      print(res)
    

    六、面向过程编程

      面向过程编程:核心是“过程”二字,过程就是解决问题的步骤,即先干啥,后干啥,再干啥,所以基于该思想编写程序就好比设计一条一条的流水线。
      优点:复杂的问题流程化,进而简单化
      缺点:牵一发而动全身,扩展性差
  • 相关阅读:
    C#的ugui与XLua整合的案例
    关于C#调用XLua的函数抛出attempt to call a nil value (global 'print')
    关于文件上传的坑,tomcat一重启图片就消失
    linux服务器安装zookeeper本地项目远程连接
    使用eazyExcel读取数据结合mybatis批量保存到数据库(优化批量保存)
    jpa set值持久化解决办法
    cascade级联关系
    @JoinTable和@JoinColumn
    json操作容易出现的细微问题
    attr和prop的区别
  • 原文地址:https://www.cnblogs.com/kk942260238/p/14231877.html
Copyright © 2011-2022 走看看