一、算法(二分法)

前引:算法就是高效解决问题的办法

算法之二分法

需求:有一个从小到大顺序排列的列表,如何高效的找到其中一个值

方案一、for循环(遍历效率太低)

for num in nums:
if num == find_num:
print('find it')
break

方案二、二分法

list1 = [1,4,5,6,7,8,9,10,15,48,98,99,789,10000]
def twocut_serch(find_num,fine_list):
print(fine_list)
if fine_list==[]:
print("找不到")
return
mid =len(fine_list)//2
half_num = fine_list[mid]
if half_num>find_num:
#查左边
twocut_serch(find_num,fine_list[:mid])
elif half_num<find_num:
twocut_serch(find_num,fine_list[mid+1:])
else:
print("找到了")
twocut_serch(2,list1)

二、面向过程与函数式

1 编程范式/思想

在我们写代码的时候我们从何入手,不同的思想会让我们有不同的着重点。

面向过程和函数式便是众多编程思想中的两个流派

强调:不同的范式应用于不同场景他们本身没有好坏之分

2 面向过程

面向过程的重点就是过程,做一件事要先做什么,后做什么,类似于流水线

优点:讲复杂的问题流程化,简单化

缺点:程序的可扩展性差,因为一套流程通常是死的,我们通常不能用a流程去完成b事物

应用场景:面向过程的程序设计一般用于那些功能一旦实现之后就很少需要改变的场景, 如果你只是写一些简单的脚本,去做一些一次性任务,用面向过程去实现是极好的,但如果你要处理的任务是复杂的,且需要不断迭代和维护, 那还是用面向对象最为方便。

3 函数式

函数式编程并非用函数编程这么简单,而是将计算机的运算视为数学意义上的运算,比起面向过程,函数式更加注重的是执行结果而非执行的过程,代表语言有:Haskell、Erlang。而python并不是一门函数式编程语言,但是仍为我们提供了很多函数式编程好的特性,如lambda,map,reduce,filter

3.1 匿名函数与lambda

1 .def定义有名函数

#func是存放函数的内存地址的名字
def func(x):
return x

2 .lambda

#匿名函数定义
#lambda 参数1,参数2...:返回值 lambda x,y:x+y def func(x,y):
return x+y #函数调用
res = (lambda x,y:x+y)(1,2)
#匿名函数由于没有名字的特性,所以如果不绑定名字的话,在函数定义结束后就被当做垃圾回收了,
#所以通常情况下都是直接在定义时执行函数,通常用做其他函数连用 func(1,2)

3.匿名函数和内置函数的应用

需求:定义一个字典,取出其中value最大的key和value最小的key

dict1 = {"hz":100,"lxt":1234,"hzxc":101}
#max,min的工作原理都是迭代器
#取出其中value最大的key
#max的第一个值(需要找最大值的可迭代对象,如果是字典,找最大key)
res = max(dict1,key=lambda k:dict1[k]) #取出其中value最大的key
res = min(dict1,key=lambda k:dict1[k]) #补充 sorted排序
sorted(dict1)#默认给key排序,得到一个列表

map,reduce,filter(了解知识)

map

#map = 映射
#把一个可迭代对象的每一个值拿出来当做函数的参数运行一次
l = [1,2,3,4]
res = map(lambda x:x**2,l)
#res是一个迭代器,它里面存放着l的每一个元素的平方

reduce

#reduce函数可以接收三个参数,一个是函数,第二个是可迭代对象,第三个是初始值
from functools import reduce
l = [1,2,3,4]
res = reduce(lambda x,y:x+y,l)
print(res)
>>>10
#1 没有初始值,reduce函数会先迭代一次array得到的值作为初始值,作为第一个值数传给x,
#然后继续迭代一次l得到的值作为第二个值传给y,运算的结果为3 #2 将上一次reduce运算的结果作为第一个值传给x,然后迭代一次l得到的结果作为第二个值传给y,
#依次类推,知道迭代完l的所有元素,得到最终的结果10

filter

#过滤列表l
l = [1,2,3,4]
res = filter(lambda x:x>3,l)
#filter会迭代列表l把得到的值传给匿名函数,如果得到结果为真,则过滤出该元素,得到一个迭代器
res >>> 4

三、模块

1 什么是模块

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

  1. 内置模块
  2. 第三方模块
  3. 自定义模块(一个py文件本身就是一个模块,文件名:m.py,模块名:m)
ps:模块有四种形式
  1 使用python编写的.py文件   2 已被编译为共享库或DLL的C或C++扩展   3 把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包)   4 使用C编写并链接到python解释器的内置模块

2 为何要有模块

原因一、内置和第三方模块拿来就用,无需定义,这种拿来主义,可以极大的提升自己的开发效率

原因二、自定义模块

​ 可以将程序的各部分功能提取到一个模块供大家一起使用

​ 好处是减少了代码冗余

3 怎么用模块

3.1第一次导入模块会发生3件事情:

  1. 产生该模块的的名称空间,将foo.py运行过程中产生的名字传给foo的名称空间中
  2. 执行foo.py
  3. 在当前文件内产生一个名字foo,把名字指向1中的名称空间

ps:重复导入不会重复执行代码

3.2引用:

引用foo内的变量:foo.x

引用foo内的函数:foo.get()

ps:此处对foo.py引用的名字不会和当前名称空间冲突

ps:可以用分隔符同行导入多个模块(不建议使用)

3.3导入模块的规范:

前:python内置模块

中:第三方模块

后:程序员自定义模块

day20 函数收尾+面向过程+模块的更多相关文章

  1. Day5_协程函数_面向过程

    def func(count): while True: yield count count +=1 #这是一个生成器,需要利用next()来执行. func(10) #yield: #1.把函数的执 ...

  2. Python函数之面向过程编程

    一.解释 面向过程:核心是过程二字,过程即解决问题的步骤,基于面向过程去设计程序就像是在设计,流水线式的编程思想,在设计程序时,需要把整个流程设计出来, 一条工业流水线,是一种机械式的思维方式 二.优 ...

  3. python-迭代器、生成器、内置函数及面向过程编程

    一.迭代器 迭代器是迭代取值的工具,迭代是一个重复的过程,每一次重复都是基于上一次的结果而来的. 为什么要用迭代器呢? 1.可以不依赖索引取值 2.同一时刻在内存中只有一个值,不会过多的占用内存 如何 ...

  4. day14-二分法、匿名函数、内置函数以及面向过程编程

    目录 二分法 匿名函数 内置函数 面向过程编程 二分法 二分法查找适用于数据量较大时,但是数据需要先排好顺序.主要思想是:(设查找的数组区间为array[low, high]) (1)确定该区间的中间 ...

  5. Python基础(9)_生成器(yield表达式形式)、面向过程编程

    一.yield表达式形式 1 #装饰器,初始化含yield表达式的生成器 def init(func): def wrapper(*args,**kwargs): g=func(*args,**kwa ...

  6. python自动化开发-[第五天]-面向过程、模块、包

    今日概要: 1.内置模块 2.协程函数 3.递归 4.面向过程编程与函数编程 5.模块 6.包 7.re正则 一.内置模块 1.匿名函数lambda 定义:匿名函数通常是创建了可以被调用的函数,它返回 ...

  7. Python面向过程、模块的使用

    一.Python面向过程 ''' 面向过程编程 核心过程二字,过程指的是解决问题的步骤,即先干什么.再干什么.然后干什么... 基于该思想编写程序就好比在设计一条流水线,是一种机械式的思维方式 优点 ...

  8. python基础----迭代器、生成器、协程函数及应用(面向过程实例)

    一.什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前退) 2.可迭代 ...

  9. 匿名函数 python内置方法(max/min/filter/map/sorted/reduce)面向过程编程

    目录 函数进阶三 1. 匿名函数 1. 什么是匿名函数 2. 匿名函数的语法 3. 能和匿名函数联用的一些方法 2. python解释器内置方法 3. 异常处理 面向过程编程 函数进阶三 1. 匿名函 ...

随机推荐

  1. LVS实现四层负载均衡

    LVS详解(思维导图) 1. 集群概述 1.1 Linux Cluster Linux Cluster的类型 LB(Load Balance) HA(High Available) HP(High P ...

  2. c常用函数-strcat 和 strncat

    strcat 和 strncat strcat与strncat都是字符串连接函数,功能上稍有区别: strcat可以把一个字符串的全部内容复制到另一个字符串的后面; strncat则是把一个字符串的指 ...

  3. redis5.0.7集群搭建

    这里实验的是129.130.240三台服务器6个节点的部署(redis集群最低要6个节点,不然无法创建). 1.压缩包安装 #wget http://download.redis.io/release ...

  4. 从字符串到常量池,一文看懂String类设计

    从一道面试题开始 看到这个标题,你肯定以为我又要讲这道面试题了 // 这行代码创建了几个对象? String s3 = new String("1"); 是的,没错,我确实要从这里 ...

  5. CentOS7 开机进入emergency mode

    今天突然操作了一下磁盘挂载,然后系统启动之后,就直接进入emergency模式了,然后只能输入密码进行救援,截图如下: 突然想了一下最近的一次操作,是因为要挂在镜像,然后每次开机都要挂载一次,觉得比较 ...

  6. 梳理搭建SSM步骤

    以上全程手撕,如有不足或错误的,请指正!

  7. Python实用笔记 (17)模块

    一个abc.py的文件就是一个名字叫abc的模块,一个xyz.py的文件就是一个名字叫xyz的模块. 现在,假设我们的abc和xyz这两个模块名字与其他模块冲突了,于是我们可以通过包来组织模块,避免冲 ...

  8. Python 中的元类到底是什么?这篇恐怕是最清楚的了

    类作为对象 在理解元类之前,您需要掌握 Python 的类.Python 从 Smalltalk 语言中借用了一个非常特殊的类概念. 在大多数语言中,类只是描述如何产生对象的代码段.在 Python ...

  9. 打开指定大小的新窗口和window.open参数

    用法: <SCRIPT LANGUAGE="javascript">   window.open ('要打开的路径', '窗口名称', '参数列表');</SCR ...

  10. css3 小三角的用法

    <div class="arrow-up"> <!--向上的三角--> </div> <div class="arrow-dow ...