自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(64)
  • 收藏
  • 关注

原创 mysql

菜单新建打开保存另存为导出打印主题偏好设置关于关闭 MySql 总体课程1.1 mysql相关概念介绍 mysql:数据库管理软件,其本质就是一个套接字程序字段:标题,表中的第一行记录:文件中的一行内容表:文件库:文件夹数据库管理软件:套接字软件数据服务器:运行有数据库管理软件服务端的计算机数据库管理软件分为2种类型: 关系型: orcale,db2,sqlserver,mysql 非关系型: redis,mem.

2020-08-31 21:19:34 231

原创 并发编程总体课程3

5.1验证GIL锁的存在方式 from threading import Thread # from multiprocessing import Process # # def task(): # while True: # pass # # if __name__ == '__main__': # for i in range(8): # # t = Thread(tar

2020-08-26 20:06:41 386

原创 并发编程总体课程2

4.1 生产者消费者模型 #1.理论 -生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题 -生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取 -阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力 #2.代码实现 # import time # import rand

2020-08-25 16:46:25 98

原创 并发编程总体课程1

多道技术 多道技术中的多道指的是多个程序,多道技术的实现是为了解决多个程序竞争或者说共享同一个资源(如cpu)的有序调度问题,解决方式即多路复用,多路复用分为时间上的复用和空间上的复用 空间上的复用:将内存分为几部分,每一个部分放一个程序,这样,同一时间内存中就由了多道程序 时间上的复用:当一个程序在等待io时,另一个程序可以使用CPU,如果内存中可以同时存放足够多的作业,则cpu的利用率可以接近100%,类似于小学所学的统筹方法. 操作系统采用了多道技术后,可以控制进程的

2020-08-24 19:51:05 352

原创 元类 单例模式

一.元类介绍python 中一切皆为对象对象是调用类产生的,那么类也是对象,调用什么类能创造类呢类的类,就是元类默认的元类是type,默认情况下,我们使用class关键字定义的类都是由type产生的二.class关键字定义类的时候做了什么1.先拿到一个类名(就是class 后的名字)2.然后拿到类的父类(就是类名后面括号内的名字)3.运行类体代码,将产生的名字放入名称空间中4.调用元类type,传入的参数为类名,父类,类的名称空间,得到一个元类的对象,然后将元类的对象赋值给变量名,得到的就

2020-08-18 20:23:40 190

原创 socket 简单通信

一.基于socket简单通信:服务端:1.创建一个服务端:import socketphone = socket.socket()###括号内不输入,默认为family = AddressFamily.AF_INETtype = SocketKind.SOCK_STREAMproto = 02.为服务端创建IP地址及端口号phone.bind((‘127.0.0.1’,8080))###ip地址应为服务端ip,127.0.0.1是本地回环地址3.为服务端创建半链接池phone.lis

2020-08-13 17:03:00 148

原创 TCP协议三次握手,四次挥手

一个TCP连接的建立是通过三次握手来实现的1.(A)——>[SYN]——>(B)假如服务器B和客户机A通讯。当A要和B通信时,首先A先向B发送一个SYN标记的包,seq=x为这个包的序列号(x一般为1),以此为这个包进行一个标识,A告诉B请求建立连接。注意:一个SYN包就是仅SYN标记设为1的TCP包,只有当B受都A发来的SYN包,才可以建立连接。(A)<——[SYN/ACK]<——(B)接着,B收到后会发一个对SYN包确认包(SYN/ACK)回去,表示对第一个SYN包

2020-08-12 20:57:52 133

原创 osi五层协议

## osi五层协议osi七层协议,应表会传网数物,将应表会合并为应用层从下到上介绍下具体功能物理层: 主要是将数据链路层传来的数据转换成电信号通过网络发送出去数据链路层: 通过以太网协议(Ethernet)将网络层传来的数据进行分组,一组电信号构成一个数据包,叫做‘帧,’每一数据帧分成:报头head和数据data两部分 head包含:(固定18个字节) 发送者/源地址,6个字节 接收者/目标地址,6个字节 数据类型,6个字节 data包含:(最短46字节,最长1500字节) 数据.

2020-08-11 23:21:05 181

原创 异常处理

## 异常处理什么是异常:异常时错误发生的信号,一旦程序错误就会产生一个异常如果该异常没有被处理,那么就会被抛出来,程序的运行随即终止异常是由三部分组成: 1.具体哪一行抛出的异常 2.异常的种类 3.异常的内容信息为什么要处理异常: 为了增强程序的健壮性如何处理异常: 1.针对语法错误,应在程序执行前立即改正 2.针对逻辑错误 2.1 如果逻辑错误发生的条件是可以预知的,应该用if判断解决,预防异常 2.2 如果逻辑错误发生的条件是不可预知的,那么异常一定会发生,考虑.

2020-08-10 21:27:01 85

原创 继承与派生

## 继承与派生什么是继承:继承是一种新建类的方式,新建的类称为子类()派生类,被继承的类称为父类(基类,超类)为什么药继承:子类会遗传父类的属性,所以继承可以解决类与类之间的代码冗余问题如何实现继承:定义类时,类名后的括号内就是父类的名字在子类派生的新方法中重用父类的功能方式一:指名道姓地调用某一个类的函数特点:不依赖于继承关系示例:在两个类 Student 和 Teacher 中,都有学校名的属性,都能接收姓名,性别,年龄参数,这个是重复的,但是除了重复的这些,__init__.

2020-08-06 15:48:45 127

原创 封装 property 绑定方法与非绑定方法

一 封装封装:把属性和功能装起来在封装的基础上,可以将装到对象或类中的属性隐藏起来PS:1.在定义类或者初始化对象时,在属性前加__,可以将该属性隐藏起来 但是该属性只是一种改名_类名__属性名,并没有真的隐藏起来 2.该变形操作是在类的定义阶段扫描语法时发生的变形,类定义之后添加的__开头的属性不会发生变形 3.该隐藏式对外不对内的,隐藏属性的意义:1.在类内开放接口, 让外界使用者通过接口来操作属性值,我们可以在接口上附加任意的逻辑来严格控制外界使用者对属性的操作 2.把功

2020-08-05 20:51:38 111

原创 面向对象之 类与对象 初始化方法 属性查找

一 类与对象 1.类的定义 1.1 class Car: pass 1.2 class Car(): ==========>推荐 pass 1.3 class Car(object): pass2. 类的实例化 obj = class Car()3.类的基本结构 类只有2种成员: (1)成员属性 (2)成员方法4.类的命名: 推荐使用大驼峰命名法PS:类中的代码可以直接执行,但是严禁使用,故不要把代码直接暴露在类中应该把相应的逻辑放在成员方法

2020-08-04 15:28:41 119

原创 正则表达式 面向对象编程

一.正则表达式正则表达式:由一系列特殊字符拼接而成的表达式/规则,该表达式用于从一个大字符串中匹配出符合规则的子字符串 1.常用匹配模式 \w 匹配字母数字及下划线 \W 匹配非字母数字及下划线 \s 匹配任意空白字符等价于\t\n\r \S 匹配任意非空字符 \d 匹配任意数字,等价于[0-9] \D 匹配任意非数字 \A 字符串开始 \Z 字符串结束,如果存在换行,只能匹配到换行前的结束字符串 \z 字符串结束 \G 匹配到最后完成的位置 \n 匹配一个换

2020-08-03 17:02:54 133

原创 基本模块 time datetime randon os sys subprocess 打印进度条

## 基本模块 一 .time python中常用几种时间方式: 1.时间戳:从1970年1月1日零时零分零秒开始计算,time.time(),得到的是个浮点数 常用于计算时间 2.格式化字符串:time.strftime('%Y-%m-%d %H:%M%S %p') 常用于显示时间 3.结构化时间:time.localtime(),得到的struct_time分为就个元素:年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时 常用于获取时间的某一部分,...

2020-07-30 18:38:56 185

原创 包的使用 json&pickle模块 hashlib模块

一.包的使用什么是包:包是含有__init__.py文件的文件夹,本质是一个模块,用来被导入的为什么要有包:在设计模块时,随着功能的完善,函数会越来越多,设计者为了便于管理,将相同功能的代码放在一个py文件中,为了使使用者调用方式不发生改变,故出现了包导入模块时会发生2件事:1.创建模块名的全局名称空间,执行模块体代码,将执行过程中的产生的名字放入名称空间中2.执行文件中创建一个模块的变量名,指向模块的名称空间而包实际上也是一种模块,他在导入时也会发生2件事:1.执行包下的__init__

2020-07-29 15:39:59 80

原创 循环导入问题 区分py文件的两种用途 模块的搜索路径与查找优先级 软件开发的目录规范

一.循环导入问题回顾:导入模块时,先会创建一个模块名的全局名称空间,将模块中的变量或函数名存放进去,再次导入此模块时,因为已经存在了此模块名的全局名称空间,故不再重新创建示例:主程序 start.py 开头就调用m1模块,m1模块中,开头导入m2模块,需要使用m2模块中的y,然后定义x = 1,m2模块开头导入m1模块,需要使用m1中的x.然后定义y=2运行流程:运行start时,先导入模块m1,创建了m1的全局名称空间,后m1开头就导入m2模块,此时x变量名还未写入m1全局名称空间就创建m2的全局

2020-07-25 17:55:30 85

原创 函数的递归调用 三元表达式 匿名函数 模块

一.函数的递归调用定义:即函数在调用的过程中又直接或者间接的调用了自己因为无限的递归会造成内存的溢出,故python设置了最大的递归层数1000查询和修改方法:import osprint(sys.getrecursionlimit())print(sys.setrecursionlimit(2000))所以不应该无限的递归调用下去,应该在满足某种条件下结束递归调用,然后返回递归调用的两个阶段:1.回溯(挖井):一层一层调用下去2.递推(从井里往外跳):满足某种条件结束回溯,然后开始向上

2020-07-23 15:49:38 122

原创 迭代器 生成器 面向过程编程 生成式 内置函数

一.迭代器1.什么是迭代器?器:工具迭代:一个重复的过程,并且每次重复都是基于上一次的结果进行的迭代器:就是一种不依赖索引取值的工具为什么要有迭代器?迭代器特点:(1)是一种通用的取值方式(2)惰性计算,节省内存如何使用迭代器:next调用for循环2.可迭代对象和迭代器对象:可迭代对象:内置有__iter__方法的都是可迭代对象,如字典,集合,列表,元组,字符串,文件对象,range迭代器对象:内置有__iter__ 和 __next__方法3.for循环的工作原理1.先将

2020-07-22 15:23:09 86

原创 闭包函数 装饰器

一,闭包函数为函数传参的2中方式:1.直接添加形参,用实参传值2.原函数外面套一层外函数,用外函数给内函数传参闭包函数 = 函数嵌套定义+函数对象+名称空间作用域闭:指的是该函数是定义在一个函数内部的函数包:指的是该函数访问了一个外函数的变量闭包的定义:内函数使用了外函数的变量,且被外函数返回二.装饰器1、什么是装饰器器:工具装饰:为被装饰者添加额外的功能2、为何要有装饰器软件一旦上线运行之后,就应该遵循开放封闭原则:1、开放指的是对拓展新功能开放2、封闭指的是对修改源代码封闭

2020-07-21 17:18:37 95

原创 可变长的参数 函数参数总结 函数对象 函数嵌套 名称空间与作用域

一.可变长的参数可变长指的是参数的个数不固定站在实参的角度,实参是为了给形参复制的,如果实参的个数不固定,那么必须要有对应的形参来接收溢出的实参1.在形参中出现和**1.1 形参中出现,会把多余的普通实参收集起来组成元组,赋值给后面的形参名1.2 形参中出现**,会把多余的关键字实参收集起来组成字典,赋值给**后的形参名2.在实参中出现和**2.1 实参中出现*,会将后的可迭代数据打散成普通实参2.2 实参中出现**,会将**后的字典打散成关键字实参3.形参中,在和**之间出现的是命名关键

2020-07-20 16:47:33 197

原创 文件修改的两种方式 函数 函数的参数

一. 文件修改的两种方式PS:硬盘上没有文件修改一说,都是新文件覆盖旧文件文件修改的思路:将文件从硬盘加载到内存,在内存中修改后覆盖回硬盘方式一:将文件一次性全部读入内存,在内存中修改好后一次性写进硬盘优点:不耗费硬盘缺点:耗费内存方式二:将文件逐行读入内存,修改好后写入临时文件将原文件删除,将临时文件改名为原文件优点:节省内存缺点:耗费硬盘方式一:with open(‘a.txt’,‘r’,encoding=‘utf-8’)as f:res = f.read()res1 =

2020-07-19 22:49:43 247

原创 文件的打开模式 文件操作的其他方法 控制文件的指针移动

一.文件的打开模式1.控制文件读写操作的模式1.1 r :只读模式, 文件不存在时报错,文件存在是指针在文件开头1.2 w:只写模式,文件不存在时创建文件,文件存在时清空文件,指针在文件开头1.3 a:只追加写模式,文件不存在时创建文件,文件存在时指针在文件末尾a 与w 总结:相同点:在打开文件不关闭的情况下,连续的写入,新的内容永远在老内容后面不同点:重新打开文件,w会清空文件,a 会保留原文件,且指针在文件末尾2.控制文件读写内容的模式1.1 t:默认模式,读写都是字符串为单位,必须要

2020-07-16 16:17:00 873

原创 字符编码 文件处理

一. 字符编码字符编码:字符编码指的是字符转成二进制数字编码的过程一定要遵循一个标准,该标准称之为字符编码什么是字符编码表:存放字符和二进制数字对应关系的表字符=编码===》二进制数字 字符《解码==二进制数字 文本编辑器打开文本的三个步骤:1、打开文本编辑器2、文本编辑器将文本内容读入到计算机内存3、文本编辑器将文本内容显示到显示屏上现有的几种字符编码表:1、ASCII:只能识别英文字符特点:采用8bit对应一个英文字符8bit=》1Byte2、GBK:可以识别中文字符串与英文

2020-07-15 19:31:02 225

原创 字典的内置方法补充 集合 字符编码

一. 字典的内置方法补充1.取值get字典取值:dic[键] 无键会报错dic.get(键,无键时的返回值) 无键返回None 或者设定好的返回值,推荐此方法,避免报错2.新增键值对dic.update(‘x’ = 1) 若存在该键则修改,不存在则添加dic.setdefault(‘x’=1) 若存在则不变,并返回原键对应的值,若不存在则添加3.dic.fromkeys([‘k1’,‘k2’],[])dic.get(‘k1’).

2020-07-14 19:54:59 103

原创 字符串 列表 元组 字典

一.字符串1、find,rfind,index,rindex,countfind 查找字符串第一次出现的索引rfind 从右侧查找字符串第一次出现的索引index 与find 用法一致,index找不到会报错count 计算字符串出现的次数2、center,ljust,rjust,zfillcenter(宽度,填充物)ljust(宽度,填充物) 默认居左rjust(宽度,填充物) 默认居右zfill(宽度) 默认居右,填充0 相当于 rjust(宽度,‘0’)3、expandtabs

2020-07-13 17:04:10 121

原创 for 循环与range联用 可变不可变类型 数字类型 字符串类型

一.for循环与range联用range()语法:range(起始值,结束值,步长)PS:1.起始值能取到,结束值取不到2.步长为1时可省略不写3,起始值为0,步长为1时可只写结束值for循环与range联用时,循环次数取决于range中值的个数二.可变与不可变类型可变类型:值改变,但是id地址不变,证明是在改变原值,是可变类型,如列表,字典不可变类型:值改变,id地址也改变,证明是产生了新值,没有改变原值,是不可变类型,如数字类型,字符串类型等三.数字类型整型:int定义整型时,x

2020-07-10 18:33:38 300

原创 while循环 for循环

一.while循环1.语法:while 条件: 代码1 代码2 ... 用法:当while后条件为True 时,则一直执行下面的子代码块,若是条件为False时,则不执行while循环2.如何结束while循环: 2.1 将条件改为False,如 sign = True while sign: ... sign = False 2.2 用break结束本层次的循环3. 死循环 while 后的条件一直为真,则是死循环4.while + continue PS:

2020-07-09 16:09:42 402

原创 赋值运算符 逻辑运算符 流程控制之if判断

一.赋值运算符1.增量赋值+= -= = /=age = 18age += 1print(age)2.交叉赋值x = 10y = 20要x,y值互换,正常情况需引入第三个值zz = xx =yy = z或者x,y = y,x3.链式赋值x=y=z= 104.解压赋值x,y,z = [1,2,3]变量与等号右侧容器内盛放的值一一对应,个数一致若只想取开头或结尾的值,可以用收集多余的值,如:x,*=[1,2,3,4,5,6]*,x =[1,2,3,4,5,6]*是收

2020-07-08 15:49:17 245

原创 常量 基本数据类型 输入输出 基本运算符

1.常量定义:不可以被改变的量python中无固定语法,约定俗成的是将变量名全部大写,就是代表常量go 语言中定义常量:const age int = 18,定义age为整型常量,值18,后面无法修改,修改会报错2.基本数据类型(1)数字类型Number1.1 整型 int定义:整数类型作用:记录个数,年龄等1.2 浮点型 float定义:小数作用:记录价格,身高等数字类型为同类型,可进行数学运算和比较运算(2)字符串类型str作用:记录描述性质的状态,如姓名,性别等定义:被引

2020-07-07 15:49:11 132

原创 注释 变量 小整数池 垃圾回收机制

注释单行注释#多行注释’’’ ‘’’ 或者 ‘’’’’’ ‘’’’’’变量1.什么是变量:量:记录下事物的状态变:记录的事物状态是可以被改变的2.为何要用变量:为了让计算机能像人一样记录事物的状态且这种状态是可变的变量存的状态是存放于计算机内存中的3.如何用变量:原则:先定义后取用1.1变量定义的三个组成部分变量名:关联一个房间的地址,用来找到变量值的赋值符号:把房间的地址绑定给变量名变量值:就是我们要记忆的数据或者状态1.2 变量名的命名规范大前提:要有意义,在保证见

2020-07-06 18:43:15 81

原创 计算机硬件基础知识普及 操作系统 编程语言分类

1、计算机硬件基础知识普及1.1 存储器:RAM 内存,可读可写ROM 内存,仅可读,存放BIOS程序CMOS ‘硬盘’,断电即丢失,耗电量极低 计算机刚出厂未安装操作系统时,电脑主板上ROM内存是自带了BIOS程序的,作用是控制基本的输入输出设备,通电后,运行BIOS程序的部分是CPU,ROM,CMOS,安装系统时,可以外接U盘或者磁盘,在BIOS程序中设置,先从U盘或磁盘检测有无系统软件,有的话可以设置优先级,从哪里优先打开系统,后面将系统文件保存至计算机硬盘中,系统运行则是CPU,RAM,

2020-07-03 16:31:16 579

原创 计算机硬件组成与工作原理

1.编程介绍什么是编程语言:人与计算机沟通的语言就是编程语言什么是编程:将人的思维逻辑用编程语言翻译出来什么是程序:存放有代码的文件为什么要编程:奴役计算机2.计算机硬件介绍计算机三大核心硬件:cpu(运算器和控制器):相当于人类大脑,负责取指令和运行内存:相当于人类大脑部分功能,负责临时记忆下做事的步骤/指令,优点:存取速度快,缺点:断电即丢失,只能临时存储硬盘:相当于本子,负责永久记录做事的步骤/指令,优点:断电仍存在,永久保存,缺点:存取速度慢运行程序与硬件间的关系:程序最先存放

2020-07-02 23:00:46 590

原创 day17作业

作业:1、文件内容如下,标题为:姓名,性别,年纪,薪资 egon male 18 3000 alex male 38 30000 wupeiqi female 28 20000 yuanhao female 28 10000要求:从文件中取出每一条记录放入列表中,列表的每个元素都是{'name':'egon','sex':'male','age':18,'salary':3000}的形式l=[]with open('a.txt','r',encoding='utf

2020-06-23 19:30:31 136

原创 day17

1.生成器生成器是能自定义逻辑的迭代器,本质就是迭代器,特征与迭代器一致自定义迭代器的好处:节省内存生成器定义:函数内存在yield关键字,调用函数不会执行函数体代码,但是会返回yield后的值,类似return,但是return是直接结束整个函数,yield会保存运行状态,下次再调用时会继续往下运行return和yield区别:return:只返回一次值,遇到return就结束函数,下次调用从头开始运行yield:可以返回多个值,调用后会记录运行状态,下次调用会继续运行,而不是从头开始2.面

2020-06-23 17:42:07 97

原创 day16作业

作业:1、编写课上讲解的有参装饰器准备明天默写def outer2(mode):def outer1(func):def inner(*args,**kwargs):res = func(*args,**kwargs)return resreturn outer1return outer1@outer2(mode=1)2:还记得我们用函数对象的概念,制作一个函数字典取代多分支if的操作吗,来来来,我们有更高大上的做法,在文件开头声明一个空字典,然后在每个函数前加上装饰器,完成自动添加到字

2020-06-22 21:50:08 88

原创 day16

day15内容:1.同时叠加多个装饰器:加载顺序是自下而上执行顺序是自上而下如:@outer1@outer2@outer3def func()可以理解为,outer1为outer2添加功能,outer2为outer3添加功能,outer3为func添加功能2.递归函数自己直接或间接调用自己的函数就是递归函数递归函数是一个循环的过程,但是有个大前提,必须在特定条件时结束递归调用,然后向上一层一层返回递归调用2个阶段:1.回溯:向下一层一层的调用2.递推:在某一层终止调用,开始向上

2020-06-22 21:02:20 88

原创 day14作业

一:编写函数,(函数执行的时间用time.sleep(n)模拟)import timedef f(x): time.sleep(1) print(x)f(1)二:编写装饰器,为函数加上统计时间的功能import timedef f(x): time.sleep(1) print(x)start_time = time.time()f(1)end_time = time.time()print('运行时间为%d秒'%(end_time-start_time))三:编写装饰器,为函

2020-06-18 23:20:14 85

原创 day14

装饰器1、什么是装饰器 器指的是工具/功能 装饰指的是为被装饰对象添加额外的功能 装饰器就是一个函数,用来为其他函数添加额外的功能 2、为何要用装饰器 程序的开发需要遵循一个原则:开放封闭原则 开放:指的是对拓展功能开放 封闭:指的是对修改源代码封闭 装饰器就是在不修改被装饰对象源代码以及调用方式的前提为被装饰对象添加上新功能3.如何用装饰器(装饰器推导) 初始函数(func:过3秒,打印参数值)(name:过2秒打印姓

2020-06-18 21:48:47 74

原创 day13作业

一:复习巩固题1、以下格式自行推导至少10遍 def index(*x,**y): print(x,y) def wrapper(*args,**kwargs): # args=(1,2) kwargs={"a":1,"b":2} index(*args,**kwargs) # index(1,2,a=1,b=2) # index(*(1,2),**{"a":1,"b":2}) # index(1,2,a=1,b=2) wrapp

2020-06-17 22:29:15 85

原创 day13

1.函数嵌套定义:一个函数内定义了另一个函数函数嵌套调用:在调用一个函数的过程中又调用了其他函数def func(radius,num):import mathdef perimeter(radius):return 2math.piradiusdef area(radius):return math.pi*(radius**2)if num == 1:return perimeter(radius)if num == 2:return area(radius)res = func

2020-06-17 19:17:14 94

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除