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

一.二分法

一.二分法=>算法

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

    # 需求:有一个按照从小到大顺序排列的数字列表
    #       需要从该数字列表中找到我们想要的那一个数字
    #       如何做更高效?
    ​
    # 方案一:整体遍历效率太低
    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

原文地址:https://www.cnblogs.com/2722127842qq-123/p/12575215.html