day20 函数收尾+面向过程+模块
一、算法(二分法)
前引:算法就是高效解决问题的办法
算法之二分法
需求:有一个从小到大顺序排列的列表,如何高效的找到其中一个值
方案一、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 什么是模块
模块就是一系列功能的集合体,分为三大类
- 内置模块
- 第三方模块
- 自定义模块(一个py文件本身就是一个模块,文件名:m.py,模块名:m)
ps:模块有四种形式
1 使用python编写的.py文件
2 已被编译为共享库或DLL的C或C++扩展
3 把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包)
4 使用C编写并链接到python解释器的内置模块
2 为何要有模块
原因一、内置和第三方模块拿来就用,无需定义,这种拿来主义,可以极大的提升自己的开发效率
原因二、自定义模块
可以将程序的各部分功能提取到一个模块供大家一起使用
好处是减少了代码冗余
3 怎么用模块
3.1第一次导入模块会发生3件事情:
- 产生该模块的的名称空间,将foo.py运行过程中产生的名字传给foo的名称空间中
- 执行foo.py
- 在当前文件内产生一个名字foo,把名字指向1中的名称空间
ps:重复导入不会重复执行代码
3.2引用:
引用foo内的变量:foo.x
引用foo内的函数:foo.get()
ps:此处对foo.py引用的名字不会和当前名称空间冲突
ps:可以用分隔符同行导入多个模块(不建议使用)
3.3导入模块的规范:
前:python内置模块
中:第三方模块
后:程序员自定义模块
day20 函数收尾+面向过程+模块的更多相关文章
- Day5_协程函数_面向过程
def func(count): while True: yield count count +=1 #这是一个生成器,需要利用next()来执行. func(10) #yield: #1.把函数的执 ...
- Python函数之面向过程编程
一.解释 面向过程:核心是过程二字,过程即解决问题的步骤,基于面向过程去设计程序就像是在设计,流水线式的编程思想,在设计程序时,需要把整个流程设计出来, 一条工业流水线,是一种机械式的思维方式 二.优 ...
- python-迭代器、生成器、内置函数及面向过程编程
一.迭代器 迭代器是迭代取值的工具,迭代是一个重复的过程,每一次重复都是基于上一次的结果而来的. 为什么要用迭代器呢? 1.可以不依赖索引取值 2.同一时刻在内存中只有一个值,不会过多的占用内存 如何 ...
- day14-二分法、匿名函数、内置函数以及面向过程编程
目录 二分法 匿名函数 内置函数 面向过程编程 二分法 二分法查找适用于数据量较大时,但是数据需要先排好顺序.主要思想是:(设查找的数组区间为array[low, high]) (1)确定该区间的中间 ...
- Python基础(9)_生成器(yield表达式形式)、面向过程编程
一.yield表达式形式 1 #装饰器,初始化含yield表达式的生成器 def init(func): def wrapper(*args,**kwargs): g=func(*args,**kwa ...
- python自动化开发-[第五天]-面向过程、模块、包
今日概要: 1.内置模块 2.协程函数 3.递归 4.面向过程编程与函数编程 5.模块 6.包 7.re正则 一.内置模块 1.匿名函数lambda 定义:匿名函数通常是创建了可以被调用的函数,它返回 ...
- Python面向过程、模块的使用
一.Python面向过程 ''' 面向过程编程 核心过程二字,过程指的是解决问题的步骤,即先干什么.再干什么.然后干什么... 基于该思想编写程序就好比在设计一条流水线,是一种机械式的思维方式 优点 ...
- python基础----迭代器、生成器、协程函数及应用(面向过程实例)
一.什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前退) 2.可迭代 ...
- 匿名函数 python内置方法(max/min/filter/map/sorted/reduce)面向过程编程
目录 函数进阶三 1. 匿名函数 1. 什么是匿名函数 2. 匿名函数的语法 3. 能和匿名函数联用的一些方法 2. python解释器内置方法 3. 异常处理 面向过程编程 函数进阶三 1. 匿名函 ...
随机推荐
- 【Jmeter】分布式压测环境配置
注意:以下四点都必须一致 1.jmeter版本 2.内置插件 3.jdk版本1.8以上 4.同属一个局域网 助攻机设置 本机助攻机Linux系统,首先需要安装JDK并配置环境 JDk基本安装及配置环境 ...
- hadoop知识整理(5)之kafka
一.简介 来自官网介绍: 翻译:kafka,是一个分布式的流处理平台.LinkedIn公司开发.scala语言编写. 1.支持流处理的发布订阅模式,类似一个消息队列系统: 2.多备份存储,副本冗余 ...
- centos7上安装memcached以及PHP安装memcached扩展(二)
开始在 PHP 中使用 Memcached 前, 我们需要确保已经安装了 Memcached 服务,接下来安装 php-memcached 扩展. PHP Memcached 扩展安装 第一步:如果 ...
- 如何在centos7安装dnf软件包
想在自己的笔记本CentOS7上安装dnf玩玩儿,但是根据百度出来的方法没有成功. yum install epel-release -y yum install dnf 现在将解决办法转载过来,如下 ...
- redis 深入理解redis 主从复制原理
redis 主从复制 master 节点提供数据,也就是写.slave 节点负责读. 不是说master 分支不能读数据,也能只是我们希望将读写进行分离. slave 是不能写数据的,只能处理读请求 ...
- EIGRP-15-其他和高级的EIGRP特性-1-路由器ID
与很多协议一样, EIGRP也使用了路由器ID (RTD)的概念,用一个4字节的编号来标识某个路由器实例.每个地址家族实例拥有自已独立的RID.工程师可以在一台路由器上,为多个EIGRP进程和地址家族 ...
- HBase 中加盐(Salting)之后的表如何读取:Spark 篇
我们知道,HBase 为我们提供了 hbase-mapreduce 工程包含了读取 HBase 表的 InputFormat.OutputFormat 等类.这个工程的描述如下:This module ...
- 刷一遍《剑指Offer》,你还需要这些知识!(一刷)
因为时间紧和基础薄弱,一刷<剑指Offer>就变成了速看. 我按照: 1.看题目思考一会: 2.上网找找关于题目里不懂的知识点: 3.看评论和官方题解的解法,尽量看懂,并及时弄懂不懂的地方 ...
- APP——python——自动化环境搭建01
前提:python以及pycharm安装完成. ---------------------------------------------------------------------------- ...
- Python在Linux下编译安装
[准备环境] Linux centos [前言] 1 linux下默认带Python,带的是2.7版本的 ,如果需要升级版本,需要把系统的自带的Python改名或者卸载,再次安装你所需要的Python ...