一、算法之二分法
算法是一种快速解决问题的方法
前提:有一个按照顺序排列的列表
需要从里面取出我们需要的值
1.1、已知
nums=[-3,4,7,10,13,21,43,77,89]
find_num=10
1.2、已学方法 通过循环遍历全部元素找到值,效率低
for num in nums: #循环取值 if num == find_num: #判断是否为目标值 print('find it') break
1.3、二分法
def binary_search(find_num,l): #设定函数名, print(l) #查看列表 if len(l) == 0: #判断剩余列表是否存在 print('找的值不存在') return #退出 mid_index=len(l) // 2 #列表长度的一半为中间值 if find_num > l[mid_index]: # 接下来的查找应该是在列表的右半部分 l=l[mid_index+1:] #中间值的右边到末尾 binary_search(find_num,l) #重复执行函数,将变量传递给函数 elif find_num < l[mid_index]: # 接下来的查找应该是在列表的左半部分 l=l[:mid_index] #开头到中间值 binary_search(find_num,l) #重复执行函数,将变量传递给函数 else: print('find it') #找到要找的目标 binary_search(find_num,nums) # 启动函数
二、面向过程
2.1、面向过程的编程思想
核心是过程两个字,过程就是流程,指的是先做什么,后做什么
基于思想编程写程序就好比设计一条流水线
2.2、优缺点
优点:复杂问题流程化,简单化
缺点:扩展性差
2.3、面向过程的编程思想应用场景
不是所有的软件编程都需要频繁更迭,比如写脚本
即便是一根程序需要频繁更迭,也不代表这个软件需要需求全部都要更迭
三、匿名函数
3.1、lambda和def的区别
def适用于有定义的函数
而没有定义的函数就是用lambda
def func(x,y): return x+y #也可以用lambda print(lamdab x,y:x+y)
3.2、调用匿名函数
3.2.1、方式一 使用print调用
res=(lambda x,y:x+y)(1,2) print(res)
3.2.2、方式二:通常匿名函数是使用通过其他函数调用
func=lambda x,y:x+y res=func(1,2) #通过函数赋值 print(res)
四、匿名函数的使用
4.1、找出薪资最高的那个人 内置函数max的应用
salaries={ 'siry':3000, 'tom':7000, 'lili':10000, 'jack':2000 res=max(salaries,key=lambda k:salaries[k]) print(res) # 内置函数max,先遍历变量salaries,去出值。 再四设定匿名函数key=lambda K k为变量 最后return salaries[k] 取出value给匿名函数
4.2、薪资最低的人 内置函数min的应用
res=min(salaries,key=lambda k:salaries[k]) print(res)
4.3、排序 按照从小到大的顺序排列sorted
从大到小则是反序,末尾加上reverse=True
res=sorted(salaries,key=lambda k:salaries[k]) print(res) #正序 从小到大 res=sorted(salaries,key=lambda k:salaries[k],reverse=True) print(res) # 反序 从大到小
4.4、 简化for循环 map的使用(了解)
l=['alex','lxx','wxx','薛贤妻'] new_l=(name+'_dsb' for name in l) #方案一 print(list(new_l)) res=map(lambda name:name+'_dsb',l) #方案二 map简化for循环 print(res) # 生成器
4.5、 if判断 filter的使用(了解)
l=['alex_sb','lxx_sb','wxx','薛贤妻'] res=(name for name in l if name.endswith('sb')) print(res) res=filter(lambda name:name.endswith('sb'),l) # 代替if判断 True print(res) #输出的都是生成器
4.6、 合并 refuce的应用(了解)
from functools import reduce res=reduce(lambda x,y:x+y,[1,2,3],10) # 16 print(res) #合并数值,求和 res=reduce(lambda x,y:x+y,['a','b','c']) # 'a','b' print(res) #合并字符,变成字符串
五、模块
5.1、什么是模块
模块是一系列功能的集合体,分为三类
1.内置模块
2.第三方模块
3.自定义模块
5.2、模块的四种形式
1.使用python编写的.py文件,例如:文件名为m.py,模块名为m
2.已经编译好的共享库或者用DLL的c或者c++扩展 (不常用)
3.把一系列的模块组织到一个文件夹内,文件夹内必须有__init__.py的文件,该文件夹称为包
4.用c语言编写,并且连接到Python解释器的内置模块
5.3、为什么要有模块
1.内置的模块以及第三方模块,无需定义,可以直接使用,可以极大的提升开发效率
2.自定义模块:可以将程序内的部分功能提取到一个模块中,为其他函数共用
减少了代码冗余,程序更加清晰
5.4、怎么使用模块
1.使用impot 模块名,引用
5.5、模块名的定义
和变量名一样,使用小写加上下划线组成
5.6、可以在函数内倒入模块
def func(): import foo