• 二分法-面向过程编程思想-函数式-模块的介绍-


    一.二分法

    一.二分法=>算法

    • 算法就是高效解决问题的方法

      # 需求:有一个按照从小到大顺序排列的数字列表
      #       需要从该数字列表中找到我们想要的那一个数字
      #       如何做更高效?
      ​
      # 方案一:整体遍历效率太低
      nums=[-3, 4, 7, 10, 13, 21, 43, 77, 89]
      find_num = 89
      for num in nums:
          if num == find_num:
              print('find it')
              break
              
      # 方式二:二分法
      '''
      # 逻辑分析,写出伪代码
      def binary_search(find_num, 列表):
          mid_val = 找列表中间的值
          if find_numm > mid_val:
              # 接下来的查找应该是在列表的右半部分
              列表=列表切片右半部分
              本身的代码(列表)
          elif find_num < mid_val:
              # 接下来的查找应该是在列表的左半部分
              列表=列表切片左半部分
              本身的代码(列表)
          else:
              print('find it')
      '''
      nums=[-3, 4, 7, 10, 13, 21, 43, 77, 89]
      def binary_search(find_num, l):
          if len(l) == 0:
              return print("不存在该值")
          mid_index = len(l)//2
          mid_val = l[mid_index]
          if find_num > mid_val:
              # 接下来的查找应该是在列表的右半部分
              new_list = l[mid_index+1:]
              binary_search(find_num, new_list)
          elif find_num < mid_val:
              # 接下来的查找应该是在列表的左半部分
              new_list = l[:mid_index]
              binary_search(find_num, new_list)
          else:
              print('find it')
      ​
      binary_search(93., nums)
       

     

     

     

    二.面向过程编程思想

    一、编程思想/范式

    • 编程范式指的就是编程的套路,打个比方,如果把编程的过程比喻为练习武功,那编程范式指的就是武林中的各种流派

       

    二、面向过程

     

    面向过程的编程思想

    • 核心:“过程”二字,过程即流程,指的是做事的步骤:先、再、后

    • 基于该思想编写程序就好比在设计一条流水线

    • 优点:能将复杂的问题流程化、进而简单化

    • 缺点:扩展性非常差

    '''
    面向过程的编程思想应用场景解析:
    1、不是所有的软件都需要频繁更迭:比如编写脚本
    2、即便是一个软件需要频繁更迭,也并不代表这个软件所有的组成部分都需要一起更迭
    '''

     

    三、函数式

     

    一. 匿名函数与lambda

     1 # 1、def用于定义有名函数
     2 # func=函数的内存地址
     3 def func(x, y):
     4     return x+y
     5 print(func)
     6  7 # 2、lambda用于定义匿名函数
     8 print(lambda x,y:x+y)
     9 10 # 3、调用匿名函数
    11 # 方式一:
    12 res=(lambda x,y:x+y)(1, 2)
    13 print(res)
    14 15 # 方式二:
    16 func = lambda x,y:x+y
    17 res=func(1,2)
    18 print(res)
    19 20 # 4、匿名用于临时调用一次的场景:更多的是将匿名函数与其他函数配合使用
     

     

    二. map、reduce、filter(了解)

     1 # map的应用(了解)
     2 l=['alex','lxx','wxx','egon']
     3 new_l = (name+'_dsb' for name in l)
     4 print(new_l)
     5  6 res = map(lambda name:name+'_dsb',l)
     7 print(res) # 生成器
     8  9 # filter的应用(了解)
    10 l=['alex_sb','lxx_sb','wxx_sb','egon_sb']
    11 res = (name for name in l if name.endswith('sb'))
    12 13 res = filter((lambda name:name.endswith('sb')),l)
    14 print(res)
    15 16 # reduce的应用(了解)
    17 from functools import reduce
    18 # 数字的合并操作
    19 res = reduce(lambda x,y:x+y,[1,2,3],10)
    20 21 # 字符串的合并操作
    22 res = reduce(lambda x,y:x+y,['a','b','c'],'hello')
    23 print(res)
     

    三.sorted、max、min

     1 salaries={
     2     'siry':3000,
     3     'tom':7000,
     4     'lili':10000,
     5     'jack':2000
     6 }
     7 # 需求1:找出字典中薪资最高的人=>lili
     8 # def func(k):
     9 #     return salaries[k]
    10 # res = max(salaries, key=func) # 返回值=func('siry')
    11 # print(res)
    12 # max的应用
    13 res = max(salaries, key=lambda k:salaries[k])
    14 print(res)
    15 # 需求2:找出字典中薪资最低的人=>jack
    16 # min的应用
    17 res = min(salaries, key=lambda k:salaries[k])
    18 print(res)
    19 20 # 需求3:将字典中的人名按照薪资从低到高的顺序进行排列
    21 # sorted的应用
    22 # reverse=True 将排序从大到小排列,默认为从小到大排列
    23 res = sorted(salaries, key=lambda k:salaries[k])
    24 print(res)
     

     

     

     

    四、模块的介绍

     

    一. 什么是模块

    模块就是一系列功能的集合体,分为三大类

    • 1.1.1 内置的模块

    • 1.1.2 第三方模块

    • 1.1.3 自定义模块

      • 一个python文件本身就是一个模块,文件名m.py,模块名叫m

    • 了解:模块分为四种形式

      '''
      1、使用python编写的.py文件
      2、已被编译为共享库或DLL的c或c++扩展
      3、把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包)
      4、使用c编写并链接到python解释器的内置模块
      '''

     

    二.为何要有模块

    • 内置与第三方的模块拿来就用,无需定义,可以极大的提升自己的开发效率

    • 自定义模块:可以将程序的各部分功能提取出来放到一个模块中为大家共享使用,减少代码冗余,程序组织结构更加清晰

     

    三、模块的使用

     

    2.1 import语句

     1 import 模块名
     2 # 1、首次导入模块会发生3件事
     3     # 1、执行foo.py
     4     # 2、产生foo.py的名称空间,将foo.py运行过程中产生的名字都丢到foo的名称空间中
     5     # 3、在当前文件中产生的有一个名字foo,该名字指向2中产生的名称空间
     6 # 之后的导入,都是直接引用首次导入产生的foo.py名称空间,不会重复执行代码(即不会重复导入同一模块)
     7  8 # 2、引用:
     9 # print(foo.x)
    10 # print(foo.get)
    11 # print(foo.change)
    12 # 强调1:模块名.名字,是指名道姓地问某一个模块要名字对应的值,不会与当前名称空间中的名字发生冲突
    13 # 强调2:无论是查看还是修改操作的都是模块本身,与调用位置无关
    14 15 # 3、可以以逗号为分隔符在一行导入多个模块(不建议在一行同是导入多个模块)
    16 # 4、导入模块的规范
    17     #I. python内置模块
    18     #II. 第三方模块
    19     #III. 程序员自定义模块
    20     import time
    21     import sys
    22     
    23     import 第三方1
    24     
    25     import 自定义模块1
    26 # 5、import 。。。 as 。。。
    27 import foo as f # f=foo
    28 f.get()
    29 30 # 6、模块是第一类对象
    31 32 # 7、自定义模块的命名应该采用纯小写+下划线的风格
    33 34 # 8、可以在函数内导入模块
    35 def func():
    36     import foo
    
    
  • 相关阅读:
    zabbix_QQ邮件告警部署(待续。。。。。。)
    FTP服务的搭建
    项目: NFS服务的搭建
    用ngxin搭建简单的下载站点
    脚本设定开机自启动
    自建小项目:自动化脚本安装ngnix项目
    Zabbix Web操作深入(待续------)
    DHCP原理与配置
    PXE高效能网络批量装机
    DNS域名解析服务
  • 原文地址:https://www.cnblogs.com/2722127842qq-123/p/12575215.html
Copyright © 2020-2023  润新知