二分法

二分法

# 基础算法(二分法)
# 二分法(有序排列)
l=[-3,5,6,8,10,16,24,45,87]

def binary_search(find_num,list_1):
    mid_val=len(list_1)//2
    if len(list_1)==0:
        print('找的值不存在')
        return
    if find_num>list_1[mid_val]:                        #这是比列表的值而不是比索引
        list_1=list_1[mid_val+1:]         在if阶段值已经被比较过了 所以要加一
        binary_search(find_num,list_1)
    elif find_num<list_1[mid_val]:
        list_1=list_1[:mid_val]
        binary_search(find_num,list_1)
    else:
        print("find it")
binary_search(11,l)

# 如果列表无序  可用.sort()排序后再进行查找

面向过程

优点: 就是过程分析再编写 (编程源于此)将复杂的问题流程化,进而简单化

缺点:程序的可扩展性极差,因为一套流水线或者流程就是用来解决一个问题,就好比生产汽水的流水线无法生产汽车一样,即便是能,也得是大改,而且改一个组件,与其相关的组件可能都需要修改

​ ”面向过程“核心是“过程”二字,“过程”指的是解决问题的步骤,即先干什么再干什么......,基于面向过程开发程序就好比在设计一条流水线,是一种机械式的思维方式,这正好契合计算机的运行原理:任何程序的执行最终都需要转换成cpu的指令流水按过程调度执行,即无论采用什么语言、无论依据何种编程范式设计出的程序,最终的执行都是过程式的。

# 函数式编程
# lambda map reduce filter


匿名函数

# 1、定义
lambda x,y,z:x+y+z

#等同于
def func(x,y,z):
    return x+y+z

# 2、调用
# 方式一:
res=(lambda x,y,z:x+y+z)(1,2,3)

# 方式二:
func=lambda x,y,z:x+y+z # “匿名”的本质就是要没有名字,所以此处为匿名函数指定名字是没有意义的
res=func(1,2,3)

# 函数式编程
# lambda map reduce filter


# 匿名函数 #产生一个函数地址(带括号是调用 不带是地址)

# #   lambda 参数:函数体代码       (自带return)
#
# 匿名函数 调用方式一
# # res=(lambda 参数:函数体代码) (传参)
# 调用方式二
# func=lambda 参数:函数体代码
# func()                          #脱裤子放屁 这是匿名函数

# 匿名函数的运用场景
# amx(迭代)           #同于list 和sum
# 字符串比大小是ascll      a<b

                # key是max和min固定接收函数的
# max(可迭代列表等,key=func(等迭代出的值))               #同list mun
#min(可迭代列表等,key=func(等迭代出的值))  记住 func在里面是不用()的   可在外定义函数def func(是max可迭代列表等迭代出来的值当作参数)意思如下:
# -----------------------------------------------------------------------max和min的应用
# max(可迭代列表等,key=func)
# 例题
# res=max(可迭代列表等,key=lambda k:可迭代列表等[k])          #字典取值最大值和lambda的合并使用传给规定的值key=  key会把得到的值做比较然后输出最大的k
# print(res)
# --------------------------------------------------------------------sorted(排序)的应用
# sorted 排序的使用
# res=sorted([3,5,6,87,546,5,54,3])
# print(res)
# sorted(可迭代列表等,key=lambda k:可迭代列表等[k]      ,reverse=True(反过来排可以没有默认)     )               #字典的比对方法()



#
# 了解
# # --------------------------------------------------------------------------map映射
# l=['alex','lxx','wxx','xxq']
# res=map(返回到函数,l)
# # ----------------------------------------------------------------------------filter 返回True  才会输出
# l=['alex','lxx','wxx','xxq']
# res=map(返回到函数,l)
# # ----------------------------------------------------------------------------reduce 累加
# l=['alex','lxx','wxx','xxq']
reduce函数可以接收三个参数,一个是函数,第二个是可迭代对象,第三个是初始值
# res=map(返回到函数,l,初始值)
# 初始值+l所有累加

模块即调用

# 什么是模块
# 模块是工具的集合
# 防止代码冗余()
# 放置在模块内的话可以共享

# 模块的命名是规范小写字母加下划线

# 包:就是文件内有__init__.py的叫包

# 导入模块
# import ***as***起别名  (名字长的话使用)
# # import(导入) foo(模块名)
# # import foof,fuc,asd(可以连着声明  但是不建议) 用逗号分隔
# 推荐
# import time     (内置模块放置第一)
# import 第三方模块  (第三方放置第二)
# import foo        (自定义模块是放最后)
#


# 2,调用模块、
# 首次导入会运行函数一次
第一次导入模块已经将其加载到内存空间了,之后的重复导入会直接引用内存中已存在的模块,不会重复执行文件


# 模块函数调用的取值也是按定义的时候决定的
# 模块名.调用函数名
# 例如 foo.func()带括号可以传参  不带括号返回函数的内存地址要next()得出结果

# 可以在局部调用在在局部使用

# 指名道姓的调用
# 加上foo.作为前缀就相当于指名道姓地说明要引用foo名称空间中的名字,
# 所以肯定不会与当前执行文件所在名称空间中的名字相冲突,并且若当前执行文件的名称空间中存在x,
# 执行foo.get()或foo.change()操作的都是源文件中的全局变量x。
posted @ 2021-04-01 18:50  欧阳锦涛  阅读(81)  评论(0)    收藏  举报
TOP 底部