2019年11月5日
摘要: 一 协程 1. 协程: 单线程下的并发,又称微线程,纤程.协程是一种用户态的轻量级线程,即协程是由用户程序自己控制调度的. 并发真正的核心: 切换并且保持状态. 开启协程并发的执行,自己的程序把控着CPU在多个任务之间来回切换 + 保持状态. 对比操作系统控制线程的切换,用户在单线程内控制协程的切换 阅读全文
posted @ 2019-11-05 22:58 Lav3nder 阅读(114) 评论(0) 推荐(0)
摘要: 一 线程queue 多线程抢占资源,只能让其串行. 1. 互斥锁 2. 队列 二 事件event 开启两个线程,一个线程运行到中间的某个阶段,触发另一个线程执行.两个线程增加了耦合性. 阅读全文
posted @ 2019-11-05 22:54 Lav3nder 阅读(137) 评论(0) 推荐(0)
摘要: 一 阻塞,非阻塞,同步,异步 执行的角度: 阻塞: 程序运行时,遇到IO程序挂起,CPU被切走. 非阻塞: 程序没有遇到IO或程序遇到IO通过某种手段让cpu强行运行程序. 提交任务的角度: 同步: 提交一个任务,自任务开始运行直到此任务结束(可能有IO),返回一个返回值之后,再提交下一个任务. 异 阅读全文
posted @ 2019-11-05 22:51 Lav3nder 阅读(262) 评论(0) 推荐(0)
摘要: 线程池: 一个容器,这个容器限制住你开启线程的数量 以时间换空间 阅读全文
posted @ 2019-11-05 22:49 Lav3nder 阅读(113) 评论(0) 推荐(0)
摘要: 一 验证计算密集型 / IO密集型的效率 IO密集型: IO密集型: 单个进程的多线程的并发效率高. 计算密集型: 计算密集型: 多进程的并发并行效率高. 二 多线程实现socket通信 服务器端: 在计算机允许范围内,开启的线程进程数量越多越好 阅读全文
posted @ 2019-11-05 22:47 Lav3nder 阅读(424) 评论(0) 推荐(0)
摘要: 一 守护线程 守护线程 等待非守护子线程以及主线程结束之后,结束. 二 互斥锁 三 死锁现象与递归锁 1.死锁: 两个或两个以上的进程或线程在执行过程中,因为争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死 阅读全文
posted @ 2019-11-05 22:46 Lav3nder 阅读(157) 评论(0) 推荐(0)
摘要: 一 什么是线程 线程是执行程序的最小单位,就像一条流水线工作的过程. 开启一个进程: 在内存中开启一个进程空间,然后将主进程的所有的资源数据复制一份,然后调用线程去执行代码 进程是资源单位,线程是执行单位 二 线程 VS 进程 1. 开启进程的开销非常大,比开启线程的开销大很多 2. 开启线程的速度 阅读全文
posted @ 2019-11-05 22:43 Lav3nder 阅读(211) 评论(0) 推荐(0)
摘要: 一 进程创建的两种方式 二 进程pid 三 验证进程之间的空间隔离 主进程和子进程之间是隔离的 四 进程对象join方法 join让主进程等待子进程结束之后,在执行主进程. 五 进程对象其他属性 阅读全文
posted @ 2019-11-05 22:37 Lav3nder 阅读(171) 评论(0) 推荐(0)
摘要: 一 进程 1. 程序: 一堆静态的代码文件 2. 进程: 一个正在运行的程序 (由操作系统操控调用交于CPU运行) 3. 串行: 所有的任务一个一个的完成 4. 并行: 多个CPU执行多个任务,真正的同时进行 5. 并发: 一个CPU完成多个任务,看起来像是同时进行 6. 阻塞: CPU遇到I/O就 阅读全文
posted @ 2019-11-05 22:33 Lav3nder 阅读(144) 评论(0) 推荐(0)
摘要: socketserver服务端 阅读全文
posted @ 2019-11-05 22:21 Lav3nder 阅读(123) 评论(0) 推荐(0)
摘要: 一 两种发生粘包的情况: 1. 接收方没有及时接受缓存区的包,造成多个包接收(客户端发送了一段数据,服务端只收了一小部分,服务端下次再收的时候还是从缓冲区拿上次遗留的数据,产生粘包) 2. 发送端需要等缓冲区满才发送出去,造成粘包 (发送数据时间间隔很短,数据也很小,会合到一起,造成粘包) 二 粘包 阅读全文
posted @ 2019-11-05 22:20 Lav3nder 阅读(136) 评论(0) 推荐(0)
摘要: 一 socket (套接字) 1. socket处于应用层与传输层之间,提供了一些简单的接口,避免与操作系统之间的对接,省去了相当繁琐复杂的操作. 2. socket在python中属于一个模块,通过调用模块中已经实现的方法建立两个进程之间的连接和通信。 1.1 基于TCP协议的socket通信 服 阅读全文
posted @ 2019-11-05 22:17 Lav3nder 阅读(575) 评论(0) 推荐(0)
摘要: 物理层 / 数据链路层 / 网络层 / 传输层 / 应用层(表示层/会话层) 一 物理层 物理层指的就是网线,光纤, 双绞线等物理传输介质 物理层发送的是数据(比特流) 二 数据链路层 数据链路层对数据进行分组 以太网协议:对数据进行合理的分组 一组数据构成一个数据报,又叫一帧 每一个数据报分为: 阅读全文
posted @ 2019-11-05 22:15 Lav3nder 阅读(134) 评论(0) 推荐(0)
摘要: C: client 客户端 B: browse 浏览器 S: server 服务器端 C/S架构: 基于客户端与服务端之间的通信 优点: 个性化设置, 响应速度快 缺点: 开发成本和维护成本高, 占用空间, 用户固定 B/S架构: 基于浏览器与服务器之间的通信 优点: 开发维护成本低,占用空间相对低 阅读全文
posted @ 2019-11-05 22:12 Lav3nder 阅读(183) 评论(0) 推荐(0)
摘要: 一 错误分类 1. 语法错误 2. 逻辑错误 二 异常处理 1. 什么是异常 异常之后代码就不执行了 2. 如何处理异常 1. if 判断式 2. try 语法: 3. 提高用户的体验性,增强代码的健壮性和容错性 4. 多分支 5. 万能异常: Exception 如果不关心错误信息,只是想要排除错 阅读全文
posted @ 2019-11-05 22:11 Lav3nder 阅读(91) 评论(0) 推荐(0)
摘要: 1. \__len__ 2. \__hash__ 3. \_\_str\_\_ (优先级高于\_\_repr_\_) 4. \__repr__ 用法和\__str__类似,返回值是什么样就返回什么样(原形毕露) 5. \__eq__ 6. \__call__ 7. \__del__ 析构方法,当对象 阅读全文
posted @ 2019-11-05 22:09 Lav3nder 阅读(108) 评论(0) 推荐(0)
摘要: python面向对象中的反射:通过 字符串 的形式操作对象相关的属性。 一 四种反射: 1. 对对象的反射 2. 对类的反射 3. 当前模块的反射 4. 其他模块的反射 二 判断函数和方法 1. 通过打印函数名的方式区别 2. 可以借助模块判断 3. 函数都是显性传参,方法都是隐性传参. 阅读全文
posted @ 2019-11-05 22:06 Lav3nder 阅读(152) 评论(0) 推荐(0)
摘要: 一 私有成员公有成员 公有成员: 在任何地方都能访问 私有成员: 只有在类的内部才能访问 类从加载时,只要遇到类中的私有成员,都会在私有成员前面加上_类名 二 实例方法 实例方法就是类的实例能够使用的方法 三 类方法 类方法使用装饰器 @classmethod 类方法: 一般就是通过类名去调用的方法 阅读全文
posted @ 2019-11-05 22:04 Lav3nder 阅读(359) 评论(0) 推荐(0)
摘要: 一 面向对象的三大特性: 继承 . 封装 . 多态(鸭子类型) 二 类的约束: 第一种方式: 第二种方式: 阅读全文
posted @ 2019-11-05 21:59 Lav3nder 阅读(171) 评论(0) 推荐(0)
摘要: 一 依赖关系 (主从之分) 将一个类的名字或者对象传入另一个类的方法中 二 组合关系 将一个类的对象封装到另一个类的对象的属性中 依赖与组合让类与类产生关系, 增强耦合性. 三 继承关系 继承者: 子类,派生类 被继承者: 父类, 基类, 超类 继承的优点: 1. 增加了类的耦合性(耦合性不宜多,宜 阅读全文
posted @ 2019-11-05 21:57 Lav3nder 阅读(309) 评论(0) 推荐(0)
摘要: 一 初识 类: 具有相似属性和功能的一类事物 对象: 类的具体表现 面向对象的优点: 1. 面向对象编程是一类相似功能函数的集合,使代码更清晰,更合理化 2. 面向对象要拥有上帝视角,类其实就是一个公共模板,对象就是从具体的模板实例化出来的 类的结构 class 是关键字,与def用法相同,定义一个 阅读全文
posted @ 2019-11-05 21:54 Lav3nder 阅读(137) 评论(0) 推荐(0)
摘要: 代码分类: 加载快, 可读性高, 查询修改简单 分析规范化目录 1. 规范固定的路径 2. settings.py 配置文件 3. src.py 主逻辑核心逻辑文件, common.py 公共组件部分 4. start.py 启动文件 5. 类似于register文件: 用户信息,数据相关,多个文件 阅读全文
posted @ 2019-11-05 21:46 Lav3nder 阅读(141) 评论(0) 推荐(0)
摘要: 定义:文件夹下具有\__init__.py文件就是一个包 阅读全文
posted @ 2019-11-05 21:38 Lav3nder 阅读(86) 评论(0) 推荐(0)
摘要: 1.time模块 2. datetime 1. 获取当前日期和时间 2. datetime 与时间戳的转换 3. str 与 datetime的转换 4. datetime加减 3. random 随机模块 随机产生验证码: 4. 序列化模块 将一种数据结构(如字典、列表)等转换成一个特殊的序列(字 阅读全文
posted @ 2019-11-05 21:37 Lav3nder 阅读(107) 评论(0) 推荐(0)
摘要: 一 模块的简介 模块: 1. 拿来就用 2. 节省开发时间 3. 提升效率 4. 结构化, 便于查找 ,便于修改,便于维护 5. 模块分类: 内置模块,第三方模块(pypi第三方模块平台),自定义模块 二 自定义模块 一个py文件就是一个模块 模块名是不需要加后缀名的 2.1 import 导入 为 阅读全文
posted @ 2019-11-05 21:25 Lav3nder 阅读(154) 评论(0) 推荐(0)
摘要: 1.不断调用自己本身 (死递归) 2.有明确的终止条件 满足以上两个才是有效递归 官方声明:最大层次1000,实测 998/997 把上面的展开 阅读全文
posted @ 2019-11-05 21:13 Lav3nder 阅读(192) 评论(0) 推荐(0)
摘要: 1 开放封闭原则 1. 拓展是开放的 (增加新功能) 2. 修改源码是封闭的 (修改已经实现的功能) 在不改变源代码及调用方式的基础上额外增加新的功能 2 装饰器 (用来装饰的工具) 2.1标准版装饰器: 语法糖: 必须放在被装饰的函数正上方 2.2带参数的装饰器 2.3多个装饰器装饰一个函数 阅读全文
posted @ 2019-11-05 21:12 Lav3nder 阅读(198) 评论(0) 推荐(0)
摘要: 1. reduce(): 累计算 ("函数","可迭代对象") 函数指定累计算的方式 2. print(): 屏幕输出 3. list(): 将一个可迭代对象转换成列表 4. tuple(): 将一个可迭代对象转换成元祖 5. dict(): 通过相应的方式创建字典 6. abs(): 返回绝对值 阅读全文
posted @ 2019-11-05 21:10 Lav3nder 阅读(206) 评论(0) 推荐(0)
摘要: 匿名函数 lambda(一句话函数) 1.语法: 变量名 = lambda 参数(形参) : 返回值 2.匿名函数的名字叫做 lambda 3.lambda是定义匿名函数的关键字; lambda后面直接加形参,形参加多少都可以,用逗号隔开; 返回值和正常的函数一样,只能返回一个数据类型,可以是任意数 阅读全文
posted @ 2019-11-05 21:02 Lav3nder 阅读(712) 评论(0) 推荐(0)
摘要: 1. eval(): 执行字符串类型的代码,并返回最终结果 2. exec:执行字符串类型的代码 以上两个内置函数很强大, 工作中禁止使用 3. hash():获取一个对象(可哈希对象:int,str,Bool,tuple)的哈希值。 4. help():用于查看函数或模块用途的详细说明。 5. c 阅读全文
posted @ 2019-11-05 20:59 Lav3nder 阅读(152) 评论(0) 推荐(0)
摘要: 1. 列表推导式 循环模式: [变量(加工的变量) for 循环] 筛选模式: [变量(加工的变量 for 循环 条件)] 2. 生成器表达式 循环模式: (变量(加工的变量) for 循环) 筛选模式: (变量(加工的变量 for 循环 条件)) 列表推导式得到的是一个列表, 生成器表达式获取的是 阅读全文
posted @ 2019-11-05 20:57 Lav3nder 阅读(206) 评论(0) 推荐(0)
摘要: 一 闭包 1. 在嵌套函数内,内部函数使用外部非全局变量 2. 作用:保护数据的安全性 3. 装饰器的本质就是闭包 二 迭代器 2.1 可迭代对象 查看 dir() 优点:使用灵活,可以直接查看值 缺点:占内存,不能迭代取值 2.2 迭代器 优点:节省内存,内存机制 缺点:使用不灵活,操作比较繁琐, 阅读全文
posted @ 2019-11-05 20:54 Lav3nder 阅读(230) 评论(0) 推荐(0)
摘要: 一 函数的名称空间 1. 内置空间:存放python解释器内置函数的空间 2. 全局空间:py文件运行时开辟的,存放的是执行的py文件(出去函数内部)的所有的变量与值的对用关系,整个py文件结束后才会消失. 3. 局部空间:函数定义时,会记录下函数名与函数体的对应关系(什么都没有,只要内存地址,只有 阅读全文
posted @ 2019-11-05 20:49 Lav3nder 阅读(312) 评论(0) 推荐(0)
摘要: 一 函数的定义,调用,返回值 1.函数的作用: 封装 减少重复代码 2.函数的书写格式 def 关键字 定义一个函数 def 函数名(): 缩进 函数体(代码块) return返回多个变量是,返回的是元祖形式,返回的内容不受限制 函数中当执行到return的时候就结束了,return以下的代码都不执 阅读全文
posted @ 2019-11-05 20:45 Lav3nder 阅读(366) 评论(0) 推荐(0)
摘要: 一 读 1. r模式 只读 f = open('t1',mode = 'r',encoding = 'utf 8') f 文件句柄 所有对文件的操作都是操作文件句柄 第一个内容是文件的路径,必须是字符串) 第二个内容(mode)是对这个文件的操作方式 可以直接写'r' 第三个内容(encoding) 阅读全文
posted @ 2019-11-05 20:36 Lav3nder 阅读(210) 评论(0) 推荐(0)
摘要: 一 深浅拷贝 1. 浅拷贝 输出结果: [1, 2, 3, [4, 5, 6, 8]] [1, 2, 3, [4, 5, 6, 8]] 字典的值是列表,列表里的元素是第二层元素 输出结果: {'123': [1, 2, 3, [4, 5, 6], 8]} {'123': [1, 2, 3, [4, 阅读全文
posted @ 2019-11-05 20:32 Lav3nder 阅读(203) 评论(0) 推荐(0)
摘要: 1 不能使用for循环的形式 列表不能循环添加 变成死循环 2 用for循环删除清空列表 2.1 pop 和range(len(li)) 2.2 偷换概念 2.3 clear 以下方式不能情况列表 1.remove 输出结果:[2, 4] 2.pop 输出结果:[1, 2] 3.del 3 用for 阅读全文
posted @ 2019-11-05 20:27 Lav3nder 阅读(191) 评论(0) 推荐(0)
摘要: 1 编码 encode 输出结果:b'\xe4\xbd\xa0\xe5\xa5\xbd' 2 解码 decode 不能使用utf 8编码后用gbk解码 用什么编码集编码就用什么编码集解码 应用场景:文件操作 网络编程 阅读全文
posted @ 2019-11-05 20:23 Lav3nder 阅读(267) 评论(0) 推荐(0)
摘要: 3.5.6 集合 关键字 set 存储数据 天然去重 无序 不能使用下标 内容为不可变数据 没有值的字典 set('123') 迭代添加 输出结果:{1, 2, 3, 4, 5, 6, 7} 面试题:用一行代码去重 输出结果:[1, 2, 3, 4, 5, 6] 3.5.6.1 增 1. add 只 阅读全文
posted @ 2019-11-05 20:21 Lav3nder 阅读(173) 评论(0) 推荐(0)