
Python学习
Python学习
Jianhao92
这个作者很懒,什么都没留下…
展开
-
38 并发编程5 - IO模型
并发编程 - IO模型1 IO模型简介前提,这里介绍的IO模型针对的是网络IO。1.1 五种IO模型IO模型IO Model阻塞IOBlocking IO非阻塞IONonblocking IOIO多路复用IO Multiplexing信号驱动IOSigal Driven IO异步IOAsychronous IO1.2 网络通信过程...原创 2020-04-28 21:18:09 · 116 阅读 · 0 评论 -
37 并发编程4 协程
并发编程1 死锁操作锁,抢锁之后需要释放锁,可能会产生死锁问题,导致程序卡住。from threading import Thread, Lockimport time# 使用互斥锁mutexA = Lock()mutexB = Lock()class CustomThread(Thread): def run(self): self.func1() ...原创 2020-04-27 22:41:35 · 115 阅读 · 0 评论 -
36 并发编程3 线程
并发编程1 开启线程开启线程的代码不需要放入main的代码块中,因为开启线程不需要再次申请内存空间以及像开启进程那样从上往下执行代码;创建线程的开销小,代码执行到start语句基本上能立即创建。from threading import Threadimport timedef task(name): print('{name} is running.'.format(n...原创 2020-04-25 18:41:03 · 127 阅读 · 0 评论 -
35 并发编程2 进程 线程
并发编程1 进程对象操作系统为了识别管理进程,会为每一个运行的进程分配一个独一无二的PID号。current_process().pidos.getpid() / os.getppid()from multiprocessing import Process, current_processdef task(): print('{pid} is running'.form...原创 2020-04-23 22:19:46 · 156 阅读 · 0 评论 -
34 并发编程1 进程
并发编程1 回顾计算机五大组成部分:控制器 运算器 存储器 输入设备 输出设备CPU = 控制器 + 运算器程序的运行过程,先将程序代码从硬盘读取到内存中,CPU再从内存中读取代码并执行。2...原创 2020-04-22 21:59:24 · 175 阅读 · 0 评论 -
33 粘包问题 socketserver简介
粘包问题 socketserver简介1 案例:远程控制服务端server.pyimport socketimport subprocesss = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.bind(('127.0.0.1', 8080))s.listen(5)while True: conn, addr = ...原创 2020-04-21 23:16:19 · 167 阅读 · 0 评论 -
32 套接字(Socket)编程
套接字(Socket)编程1 套接字介绍套接字(Socket)是把OSI模型中从传输层到物理层封装起来的抽象层,把网络协议隐藏在Socket抽象层内,只对使用者暴露使用接口,使用者只需考虑应用层的数据即可。1.1 工作流程基于TCP协议的网络连接创建套接字对象socket.socket(family, type, proto)参数family:套接字家族,AF_UNIX (同...原创 2020-04-20 22:56:20 · 256 阅读 · 0 评论 -
项目2 选课系统
项目2 选课系统1 需求角色:学校、学员、课程、讲师要求:创建北京、上海 2 所学校;创建linux , python , go 3门课程,linux和python 在北京校区开课,go在上海校区开课;课程包含,周期,价格,通过学校创建课程;通过学校创建班级, 班级关联课程和讲师;创建学员时,选择学校,关联班级;创建讲师角色时要关联学校;提供角色接口7.1 学员视图,可以注...原创 2020-04-19 20:04:22 · 307 阅读 · 0 评论 -
31 网络基础知识-后篇
网络编程1 互联网协议层单位内容协议物理层位 (bit)二进制数据数据链路层帧 (frame)帧头 + 数据以太网协议网络层包 (packet)IP报头 + 数据IP协议 ARP协议传输层段 (segment)TCP/UDP报头 + 数据TCP协议 UDP协议应用层数据数据链路层提供mac地址,用于定位子网内的...原创 2020-04-18 20:12:19 · 213 阅读 · 0 评论 -
30 异常处理 网络基础知识-前篇
异常处理 网络编程1 异常处理1.1 什么是异常异常是程序发生错误的信号,一旦程序运行出错,就会抛出异常,程序随即终止运行。异常的主要组成部分:Traceback 异常的追踪信息,用于定位到异常的位置。异常的类型异常的内容1.2 为什么需要异常为了增强程序的健壮性。在程序出错时不希望终止程序运行,而是捕捉到异常并处理,将错误信息记录到日志中。1.3 如何处理异常错误来源...原创 2020-04-16 23:02:06 · 392 阅读 · 0 评论 -
29 反射 内置方法 元类
反射 内置方法 元类1 反射1.1 什么是反射机制Python属于动态语言,即程序执行变量定义语句时才确定变量的类型。反射机制指的是在程序的运行过程中动态地获取程序信息以及动态调用对象的功能。在程序的运行过程中,对于类,可以知道这个类的所有属性和方法;对于对象,可以调用这个对象的所有属性和方法。1.2 为什么使用反射当需要访问某个对象的属性,却不能确定这个对象是否拥有这个属性时,...原创 2020-04-15 23:22:42 · 151 阅读 · 0 评论 -
28 Mixins机制 派生与方法重用 组合 多态 绑定方法与非绑定方法 常用内置函数
Mixins机制 派生与方法重用 多态 常用的内置方法1 Mixins机制Mixins机制是一种类的命名规范,指的是子类混合(mixin)多个类的功能,而这些类采用统一的命名规范(例如后缀Mixin),以此标识这些类只是用来提供功能的,与子类并不存在从属"is-a"关系,但本质上Mixins机制仍属于继承,同样遵守”is-a”关系。class Person: def __init__...原创 2020-04-10 20:20:42 · 248 阅读 · 0 评论 -
27 property 继承
property 继承1 装饰器property1.1 装饰器property介绍装饰器是在不修改被装饰对象的代码和调用方式的基础上,为被装饰对象添加新功能的可调用对象。装饰器实质上是一个可调用对象,包括函数和类。property是用类实现的装饰器。property装饰器可以将一个方法伪装成属性,该方法仅有一个self参数。以属性的方式(无括号)去调用这个方法。class Spor...原创 2020-04-09 20:33:28 · 270 阅读 · 0 评论 -
26 面向对象示例 封装
面向对象示例 封装1 面向对象示例1.1 需求选课系统项目中涉及到诸多数据与功能,要求引入面向对象的思想对其进行高度整合学校班级课程1.2 学校共有属性:学校名独有属性:校区名,地址,班级方法:添加班级,打印班级class School: # 对象共有的属性 full_name = 'Old Boy' # 学校名 # 定制对象独有的属性 def __init...原创 2020-04-08 20:40:51 · 166 阅读 · 0 评论 -
25 面向对象
类和对象1 面向对象的核心思想面向过程编程思想的核心是过程,过程的核心思想是将程序流程化,分步骤解决问题。面向对象编程思想的核心是对象,对象的核心思想是对程序中的数据与功能进行整合。对象是是用来存储数据与功能的容器,模块,列表,字典等都可以用于存放数据和功能,因此都是对象。可以将具有相互联系的能实现一定功能的代码整合到容器中存起来,需要这个功能时可以通过容器的名字来找到这些代码,这个容器...原创 2020-04-07 19:47:31 · 129 阅读 · 0 评论 -
项目1 ATM + 购物商城
项目1 ATM + 购物商城1 需求分析1.1 项目需求模拟实现一个ATM + 购物商城程序主要功能包括:额度默认为15000,可以自定义额度;实现购物商城,买东西加入购物车,调用信用卡接口结账;可以提现,手续费5%;支持多账户登录;支持账户间转账;记录每月日常消费流水;提供还款接口;ATM记录操作日志;提供管理接口,包括添加账户、用户额度,冻结账户等;用户认证用装饰...原创 2020-04-02 20:18:17 · 230 阅读 · 0 评论 -
24 模块 日志模块 re模块
模块 日志模块 re模块1 日志模块1.1 日志日志(Log)是指程序运行过程中指定对象的某些操作及其结果的记录集合。1.2 日志级别import logging# 程序在调试过程中运行状态确认logging.debug('调试') # 级别:10# 程序正常运行时的状态信息logging.info('消息') # 级别:20# 警告消息,预测程序之后可能会发生问题,...原创 2020-04-01 21:57:56 · 220 阅读 · 0 评论 -
23 模块 json&pickle 猴子补丁 configparser hashlib subprocess
模块 json&pickle configparser hashlib1 json&pickle模块1.1 序列化与反序列化序列化指将内存中的数据转换为一种特定的格式,可用于存储和传输给平台使用。特定格式包括json,pickle反序列化指将特定格式的数据反解成原数据。evaldict1 = {'a': 97, 'b': 122}dict1_str = str(di...原创 2020-03-31 22:08:19 · 228 阅读 · 0 评论 -
22 模块 时间 random os sys shutil
模块 time os sys random1 时间模块1.1 time模块time模块主要包括一个类 struct_time。1.1.1 时间格式分类时间戳timestamp格林威治时间1970-01-01 00:00:00 到现在经历的总秒数。作用:主要用于时间间隔的计算。now_timestamp = time.time() # 返回值的类型是floatprint(n...原创 2020-03-30 22:19:55 · 158 阅读 · 0 评论 -
21 模块 包 软件目录规范
模块 软件目录规范1 模块1.1 python文件的用途将文件当作程序运行;将文件当作模块,导入到其它文件中。区别:文件当作程序运行时,由于没有其它文件引用这个文件,因此运行结束后其名称空间会被销毁;文件当作模块导入到其它文件时,会先运行模块文件,产生模块文件的名称空间,并在主文件中存在对模块名称空间的引用。因此即使模块文件运行结束,其名称空间也不会销毁,而是等待主文件运行结束后...原创 2020-03-28 21:21:19 · 173 阅读 · 0 评论 -
20 二分法 面向过程 函数式编程 模块
二分法 面向过程 函数式编程 模块1 二分查找法算法是高效解决问题的方法。二分查找法 Binary Search前提:列表中的元素按照升序排列具体步骤:如果带查找的列表为空,则说明列表中不存在目标元素;将列表中间位置的元素与目标值进行比较,如果两者相等,则查找成功;否则根据这个中间元素将列表分为前后两个子列表;根据中间位置的元素与目标值的大小关系确定带查找的子列表,如果中间位置...原创 2020-03-26 21:48:20 · 336 阅读 · 1 评论 -
19 多个装饰器的执行顺序 yield表达式形式 生成式 递归函数
叠加多个装饰器分析 yield表达式形式 生成式 递归函数1 多个装饰器的执行顺序函数外包裹函数的目的是为了向内部函数wrapper传参。最终都是将原函数func_test换成wrapper函数。装饰器的加载顺序从下到上。装饰器的执行顺序从上到下。# 3. func1指向的是原函数wrapper2的内存地址def deco1(func1): print('deco1 star...原创 2020-03-25 20:51:54 · 185 阅读 · 0 评论 -
18 迭代器 生成器
迭代器 生成器1 装饰器1.1 回顾1.1.1 装饰器偷梁换柱,即将原函数名指向的内存地址偷梁换柱成wrapper函数所以应该将wrapper做的跟原函数一样才行。def deco(func): def wrapper(*args, **kwargs): # 1. 调用原函数 # 2. 为原函数增加新的功能 res = func(...原创 2020-03-24 22:15:34 · 201 阅读 · 0 评论 -
17 装饰器
装饰器1 回顾1.1 *args, **kwargs在形参中代表汇总,args:表示将多余的位置实参收集起来,以元组的形式赋值给形参args。**kwargs:表示将多余的关键字实参收集起来,以字典的形式赋值给形参*kwargs。在实参中代表打散,*args:表示将其后面的容器中存放的元素分解,转换为位置实参。**kwargs:表示将其后面的字典中存放的元素分解,转换为关键字实参。...原创 2020-03-23 20:31:45 · 277 阅读 · 0 评论 -
16 函数对象 函数嵌套 闭包函数
函数对象 函数嵌套 闭包函数1 函数对象精髓:可以将函数当作变量来使用。可以用于赋值def func1(x): print('func1', x)func2 = func1func2(func2) # func1 <function func1 at 0x内存地址>可以将函数名作为函数的参数def func1(func): print('f...原创 2020-03-20 20:19:50 · 197 阅读 · 0 评论 -
15 函数参数补充 命名空间和作用域详解
函数参数补充 名称空间详解1 函数参数补充1.1 命名关键字参数(形参)函数定义阶段,在 * 后面的形式参数。def func(x, y, *, kw1, kw2): print(kw1, kw2) def func(x, y, *args, kw1, kw2): # 可以用args接受多余的位置实参 print(kw1, kw2)其中形参a和b被称为命名关...原创 2020-03-19 21:01:10 · 187 阅读 · 0 评论 -
14 函数参数
函数参数1 形参与实参简介形参指的是函数定义阶段的函数名后小括号中的变量(形式上的参数)。实参指的是函数调用阶段传递给函数的实际的值。形参相当于变量名,实参相当于变量值。在函数调用阶段,实参被绑定给形参,形参与实参的绑定关系只能在函数体内存在,形参与实参的绑定关系在函数调用时生效,在函数调用结束后绑定关系被解除。def func(a, b): pass# 形式1func...原创 2020-03-18 17:29:29 · 332 阅读 · 0 评论 -
13 函数基础
函数基础1 什么是函数函数是组织好的,可重复使用的,用来实现单一或相关联功能的代码段。2 为什么使用函数不存在函数时:组织结构不清晰,可读性差;代码冗余;可维护性、扩展性差。函数能提高应用的模块性和代码的重复利用率。3 如何使用函数原则:先定义 后调用。定义函数的过程:在内存中申请空间来保存函数体的代码;将该内存地址交给函数名;定义函数时不会执行函数体代码,但会检测函...原创 2020-03-17 22:10:55 · 916 阅读 · 0 评论 -
12 文件处理高级
文件处理高级1 文件处理回顾1.1 什么是文件文件用于用户通过操作系统来在硬盘上存取数据的接口。1.2 如何操作文件打开文件open(filepath, mode=’’, encoding=’’)返回文件对象或者文件句柄。1.3 问题如果需要操作一个大文件,打开文件时是否存在效率问题?不会,打开文件只是获得文件对象,没有读写操作。读的过程中如果待读取的数据量非常大,或者写的...原创 2020-03-16 22:13:18 · 229 阅读 · 0 评论 -
11 文件处理
文件处理1 文件概述1.1 什么是文件文件是操作系统提供给使用者(用户/应用程序)用于操作硬盘的一种虚拟的概念/接口。1.2 为什么需要文件用户/应用程序可以通过文件将数据永久保存的硬盘中。用户/应用程序直接操作的对象是文件,对文件进行的所有的操作,都是在向操作系统发送系统调用,然后再由操作系统将这些操作转换成具体的硬盘操作。2 如何使用文件文件处理主要使用函数open()ope...原创 2020-03-13 21:57:10 · 159 阅读 · 0 评论 -
10 基本数据类型之集合 字符编码
基本数据类型之集合 字符编码1 集合1.1 什么是集合?无序的不重复元素序列称为集合。无序,可修改,元素无重复集合不可以通过索引的方式访问1.2 集合的定义可以使用大括号 { } 或者 set()注意:集合内元素必须为不可变类型集合内元素无序集合内元素无重复s1 = {1, 1, 'aaa', (1, 2)} # {1, (1, 2), 'aaa'}s2 = set...原创 2020-03-12 22:40:52 · 219 阅读 · 0 评论 -
9 基本数据类型之列表,元组和字典
基本数据类型之列表,元组和字典1 列表1.1 什么是列表作用:按照索引/位置存放多个值,可读可改定义: [ ] 内用逗号分隔开多个任意类型的元素l1 = [1, 'a', 1.2, [1, 2], {'a': 97}]l1 = list([1, 'a', 1.2, [1, 2], {'a': 97}])# 定义空列表l2 = []l2 = list()1.2 类型转换凡是...原创 2020-03-11 19:16:09 · 381 阅读 · 0 评论 -
8 流程控制之for语句 基本数据类型之数据和字符串
流程控制之while语句 基本数据类型1. 流程控制之while语句2. 基本数据类型3. 练习3.1 for循环嵌套之打印99乘法表for i in range(1, 10): for j in range(i, 10): print('{i} * {j} = {k}'.format(i=i, j=j, k=i*j), end='\t') print('...原创 2020-03-10 15:09:55 · 163 阅读 · 0 评论 -
7 深拷贝浅拷贝 流程控制之while语句
短路运算 深拷贝浅拷贝 流程控制之while语句1 短路运算短路运算就是偷懒,偷懒到哪个位置,就将该位置的值返回,返回的值不只是True/False,而是返回符合条件的那个值。and: 全真则真,一假即假or: 全假则假,一真即真res = 1 and 10# 对于and全真则真,结果取决于后者,运算结果为真,返回10res = 0 and 10# 对于and一假即假,结果取决于...原创 2020-03-09 20:37:02 · 268 阅读 · 0 评论 -
6 格式化输出补充 运算符 流程控制之if语句
格式化输出补充 流程控制1 格式化输出补充1.1 format^, <, > 分别是居中、左对齐、右对齐,后面的数字是整体宽度, : 后面是带填充的字符,只能是一个字符,不指定则默认是用空格填充。str1 = '{x}'.format(x='开始执行')str2 = '{x:*<10}'.format(x='开始执行') # 开始执行******str3 = '{x...原创 2020-03-06 20:08:57 · 179 阅读 · 0 评论 -
5 垃圾回收机制详解 与用户交互 基本运算符
垃圾回收机制详解 与用户交互 基本运算符1. 垃圾回收机制1.1 内存中的堆和栈解释器在执行变量定义的语法时,为该变量在内存中开辟空间来存储变量值,然后将被分配的内存空间的地址交给变量名。变量名实际存储的是变量的地址在内存中的地址。x = 1001 # 变量名x存储的地址指向的内存中存储了整数1001y = x # x将存储的内存地址复制交给了y,此时x和y同时指向整数1001x...原创 2020-03-05 19:51:25 · 276 阅读 · 0 评论 -
4 变量与基本数据类型
变量与基本数据类型1. 变量1.1 什么是变量顾名思义,可以变化的量,这里量可以理解为变化的状态。1.2 为什么要有变量?为了让计算机能够像人一样去记忆事物的某种状态,并且状态是可以发生变化的。具体来说,程序的运行过程中会伴随着一系列状态的变化,需要一种机制去保存记录程序执行过程中的状态以及变化过程。1.3 使用方法先定义,后引用1.3.1 变量的定义由三个部分组成,变量名,赋...原创 2020-03-04 22:11:09 · 495 阅读 · 2 评论 -
3 编程语言与Python介绍
编程语言与Python介绍1. 编程语言介绍编程语言可以分为机器语言,汇编语言和高级语言。1.1 机器语言机器语言是机器能直接理解和接受的程序语言,计算机内部是基于二进制指令工作的,因此机器语言直接使用二进制编程,从使用的角度看,属于低级语言。特点:执行效率最高机器语言编写的程序可以被计算机硬件直接理解,无需翻译,因此执行效率最高。开发效率最低程序员需要耗费大量的时间精力去保...原创 2020-03-03 21:20:26 · 234 阅读 · 0 评论 -
2 计算机基础知识2
计算机基础知识1. CPU1.1 CPU的分类与指令集1. CPU中央处理器,是负责计算机主要运算任务的器件。2. 指令集(ISA,Instruction Set Architecture)CPU执行计算任务时都需要遵从一定的规范,程序在被执行前都需要先翻译为CPU可以理解的语言,这种规范或语言就是指令集。程序被按照某种指令集的规范翻译为CPU可识别的底层代码的过程叫做编译(comp...原创 2020-03-03 20:01:58 · 387 阅读 · 0 评论 -
1 计算机基础知识1
计算机基础知识1. 什么是编程语言?编程语言是指人与计算机交流的工具,使人可以操作控制计算机。2. 计算机的五大组成部分2.1 控制器计算机中协调控制硬件的运行。2.2 运算器计算机中执行各种算术和逻辑运算操作的部件。2.3 存储器存储器就是用来存放数据的部件,分为内存和外存。2.3.1 内存存取速度都快,基于电工作的,断电数据就丢失,不能永久保存数据。2.3.2 外存...原创 2020-03-02 20:45:13 · 174 阅读 · 0 评论