
Python
Allen__MB
这个作者很懒,什么都没留下…
展开
-
socket服务端加并发:socketserver
socket服务端要同时连接多个客户端,只能排队连接是不符合实际开发需求的,要实现scoket模块的并发就需要socketserver模块。#socketserver服务端.pyimport socketserverclass MyServer(socketserver.BaseRequestHandler): def handle(self): while 1: from_client_data = self.request.recv(1024)原创 2021-03-24 15:20:16 · 157 阅读 · 0 评论 -
数据库介绍
数据库管理系统存在的意义1.如果软件直接和硬盘进行操作提取或者储存数据IO多,使用数据库管理系统会以最少的IO操作数据。2.可以解决数据储存提取等操作的并发。数据库一些概念记录:一条信息表:文件库:文件夹数据库管理系统:软件数据库服务器:一台机器,安装了数据库管理软件数据库分类:关系型数据库:mysql oracle sqlserver sqlite Accessmysql最大的好处就是开源oracle不开源所以特别安全,费用高,一般用在银行政府等。sqlserver特别简单原创 2021-03-24 09:48:09 · 196 阅读 · 1 评论 -
计算机发展史与进程等相关概念
计算机发展史最早出现的计算机:算盘电子类计算机发展史:第一代计算机1940~1955在大学里出现了机房,想使用计算机必须预约。先连接调配各个硬件,真空管,再插上程序调试,效率极低。优点:个人独享整个计算机资源缺点:1.硬件调试插线耗时效率低 2.所有人都是串行执行第二代计算机:磁带储存——批处理系统优点:1.程序员不用亲自对硬件进行插线操控,效率提高。2.可以进行批量处理代码。缺点:1.程序员不能独享计算机 2.所有程序还是串行第三代计算机:集成电路,多道程序系统大背景:1.集成电原创 2021-03-24 00:12:18 · 171 阅读 · 0 评论 -
基于UDP协议的socket
UDP协议是无链接的,先启动哪一端都不会报错#server.py内import socketserver = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)#面向报文的server.bind(("127.0.0.1", 8801))while 1: data = server.recvfrom(1024) #data接收到是一个元组,第一个元素是数据内容,第二个元素是元组形式的客户端IP和端口号 print(f"来自原创 2021-03-21 23:44:35 · 994 阅读 · 0 评论 -
自定制报头解决粘包问题实现文件的下载
Json存在的意义数据是需要以bytes的形式在网络之中相互传输的,而数据类型中,只有str数据可以通过bytes()函数转换为bytes形式,所以很直接的想法就是将其他类型的数据转换为str,再通过bytes()函数转换为bytes,再通过网络传输。这就涉及到一个问题,接收方接收到bytes数据并通过解码反解回str数据后再如何将str数据转换为原始数据。Json就是解决的这一问题,可以通过Json模块将数据转换为一种特殊的str数据,这种str数据可以反解回原始数据类型。这样就解决了数据在网络中的原创 2021-03-21 23:03:54 · 95 阅读 · 0 评论 -
粘包现象与粘包的简单解决
数据缓冲区每个 socket 被创建后,都会分配两个缓冲区,输入缓冲区和输出缓冲区。write()/send() 并不立即向网络中传输数据,而是先将数据写入缓冲区中,再由TCP协议将数据从缓冲区发送到目标机器。一旦将数据写入到缓冲区,函数就可以成功返回,不管它们有没有到达目标机器,也不管它们何时被发送到网络,这些都是TCP协议负责的事情。TCP协议独立于 write()/send() 函数,数据有可能刚被写入缓冲区就发送到网络,也可能在缓冲区中不断积压,多次写入的数据被一次性发送到网络,这取决于当时原创 2021-03-14 14:18:20 · 410 阅读 · 0 评论 -
基于TCP协议的socket应用实例:执行远程命令
subprocess模块subprocess模块可以模拟cmd命令行的运行import subprocessobj = subprocess.Popen("dir", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) print(obj.stdou原创 2021-03-11 23:04:03 · 175 阅读 · 0 评论 -
合理退出通信、基于TCP协议的socket循环通信、基于TCP协议的socket通信与链接循环
socket通信的正常退出#server.py中import socketphone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)phone.bind(("127.0.0.1", 8848))phone.listen(5)print("监听状态")conn, addr = phone.accept()print("已被连接")print(f"客户端IP为{addr[0]}", f"客户端端口为{addr[1]}")#通过原创 2021-03-11 18:17:28 · 333 阅读 · 1 评论 -
DNS服务器
路由器的IP分内网IP和外网IP外网IP就是和公网通信时采用的IP内网IP:在局域网内,所有计算机的IP地址都是假的,都是通过路由器的DHCP协议自动分发的IP地址和网关。DNS服务器前提:第一次访问京东1.电脑A要访问京东网站,在浏览器内输入www.JD.com电脑A将域名单播给交换机交换机将域名单播给路由器路由器会将域名发给DNS服务器DNS服务器会将域名转换为对应网段返还给路由器路由器判断目标网段和源网段是否处同于自己的网段发现不属于自己网段则通过原创 2021-03-04 15:17:04 · 344 阅读 · 1 评论 -
socket套接字
socket定义socket相当于一个接口,承上启下,在应用层和操作系统之间起承接作用。实际上从传输层开始及以下,都是操作系统帮忙完成的,不需要手动封装。socket就是封装了系统内多个层的中间接口。socket又称套接字,它是应用层与TCP/UDP协议族通信的中间软件抽象层,是一组接口。在设计模式中,socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在socket口后面,对用户来说,一组简单的接口就是全部,让socket区组织数据,以符合制定协议。socket抽象层存在的原因:原创 2021-03-04 14:45:50 · 248 阅读 · 1 评论 -
osi七层协议
C/S与B/S架构C:Client端B:Browse端 浏览器S:Server端原创 2021-02-28 21:30:38 · 484 阅读 · 0 评论 -
异常处理
异常处理错误的分类1.语法错误 2.逻辑错误、异常处理只能处理代码的逻辑错误。异常的定义代码发生异常错误之后,程序被中断。异常处理定义当代码出现异常时,通过某种方法不让程序中断,合理的“跳过”异常。异常处理的作用1.用户体验良好2.是代码更有健壮性和容错性异常处理的两种方式1.if 只能处理简单异常2.try 异常处理的常用方式try: # doc = {"name": "MB", "age": 25} # salary = doc["salary"]原创 2021-02-24 15:23:21 · 171 阅读 · 0 评论 -
Matplotlib模块
Matplotlib模块是Python中用来画图的模块制作折线图利用plt.plot(x轴,y轴)结构创建折线图import matplotlib.pyplot as pltimport pandas as pddata = pd.read_csv("UNRATE.csv")data["DATE"] = pd.to_datetime(data["DATE"])#利用pd.to_da...原创 2019-07-27 22:57:57 · 558 阅读 · 0 评论 -
Pandas模块
Pandas是Python中关于数据处理的模块Pandas的底层是基于Numpy来实现的,它的核心数据结构是DataFrame读数据原创 2019-07-26 20:37:13 · 387 阅读 · 0 评论 -
Numpy模块
numpy是Python中关于矩阵处理的模块numpy的核心数据结构是array,是列表中嵌套列表的结构创建向量、矩阵;查看shape,改变shape;取出某个数据import numpy as npvector = np.array([1, 2, 3, 4, 5])matrix = np.array([[1, 2, 3, 4, 5], [2, 3, 4, 5, 6]]) #列表嵌套...原创 2019-07-26 17:58:12 · 233 阅读 · 0 评论 -
元类,自定制元类的内容
元类的概念元类是类的类,是类的模板元类是用来控制如何创建类的,正如类是创建对象的模板一样元类的实例是类,正如类的实例为对象type是python的一个内建元类,用来直接控制生成类,python中class定义的类其实都是type类实例化的对象产生类的两种方式类的产生有两种方式,这两种方式产生的类的本质是一样的class Foo: x = 1FFo = type("FF...原创 2019-07-20 19:46:55 · 122 阅读 · 0 评论 -
利用类的描述符完成一个自定制的property
由property的形式可以看出,@property 也是在调用一个装饰器,所以,装饰器不光可以是一个函数,也可以是一个类#默认的propertyclass Room: def __init__(self, name, width, length): self.name = name self.width = width self.len...原创 2019-07-20 10:54:00 · 106 阅读 · 0 评论 -
类的装饰器
在python中一切皆对象,函数和类都是一个对象,所以装饰器可以应用在函数,就应该也可以应用在类#函数装饰器举例def deco(func): print("====,装饰器运行") return func@deco # Foo = deco(test)def test(): print("test")#类装饰器举例def deco(func): ...原创 2019-07-20 09:46:58 · 134 阅读 · 0 评论 -
类的描述符
描述符的定义描述符本质就是新式类,在这个新式类中,至少实现了__get__()、set()、delete()中的一个,这也被称为描述符协议_ get_():调用一个属性时触发_ set_():为一个属性赋值时触发_ delete_():采用del删除属性时触发描述符作用定义一个描述符:class Foo: def __get__(self, instance, owner):...原创 2019-07-16 17:15:15 · 766 阅读 · 0 评论 -
__enter__()、__exit__()实现上下文管理协议
打开函数open的本质也是一个工厂函数,所以它的运行也是实例化的过程,产生的对象就是文件句柄f = open("a.txt")print(f.name)f.close()为了可以实现 with open 的结构,需要定义__enter__()、_ exit_()来实现上下文管理协议,以实现以下结构:with open(“a.txt”) as f:“代码块”class Open: ...原创 2019-07-19 19:05:45 · 334 阅读 · 0 评论 -
软件开发规范目录
编写代码时采用规范的目录结构有以下好处:1.可读性高 2.可维护性高可以采用如下目录结构:|–bin #执行文件|–conf #静态参数|–db #储存数据|–lib #放公共类、库|–log #放入日志|–src #写主逻辑bin中可以有多个可执行文件,区分程序不同的入口,例如教师使用端和学生使用端conf文件中的通常是一些静态配置,例如各种package的DIR参数...原创 2019-07-16 22:08:17 · 210 阅读 · 0 评论 -
__getattribute__()方法、__next__()和__iter__()实现迭代器协议、item()方法等类的各种双下划线方法
class Foo: def __init__(self, y): self.y = y def __getattr__(self, item): print("执行的是getattr") def __getattribute__(self, item): print("执行的是getattribute")f1 = ...原创 2019-07-14 23:05:31 · 272 阅读 · 0 评论 -
isinstance(obj, cls)、issubclass(sub, super)
isinstance(obj, cls)检查obj是不是cls的实例class Foo: passf1 = Foo()print(isinstance(f1, Foo))issubclass(sub, super)检查sub是否是super的子类class Foo: passclass Bar(Foo): passprint(issubcl...原创 2019-07-14 22:38:15 · 216 阅读 · 0 评论 -
反射
反射的概念反射是指程序可以访问,检验和修改它本身状态或行为的一种能力(也称为自省)反射的实现反射通过以下四个函数实现hasattr(boject, name)getattr(object, name, default = None)setattr(object, key, value)delattr(object, key)#这里的name, key, value 都需要是...原创 2019-07-12 10:14:02 · 117 阅读 · 0 评论 -
双下划线开头的attr方法
_ getattr_()当调用一个不存在的属性时,就会触发__getattr__()class Foo: x = 1 def __init__(self, y): self.y = y def __getattr__(self, item): print("执行__getattr__()") print("不存在",i...原创 2019-07-12 12:08:59 · 183 阅读 · 0 评论 -
二次加工标准类型(包装)
python中,数据的标准类型有字符串、列表、字典、元组等,每一个数据类型都可以通过一个工厂函数得到,也就是说每一个类型都是通过类的方法实现的,对类内的方法作出修改,而不改动其他方法,就实现了对标准类型的二次加工,或者说实现了自己定制标准类型的需求通过继承和派生的方式实现包装需求:改变列表的append方法,设置为只可以append字符串增加一个show_middle方法,显示列表的中间元素...原创 2019-07-12 16:09:00 · 268 阅读 · 0 评论 -
动态导入模块
通常模块的导入是import 模块名 但有时候需要在程序运行过程中加载模块,这时模块名可能是一个字符串,就无法使用import mokuaiming 的方式导入应该采用__import__()方法或者 importlib模块的导入方法import()采用__import__()方法传入的可以是一个字符串,但只会加载目录的顶层#module文件下的cal.py文件内def add(*arg...原创 2019-07-12 10:53:35 · 134 阅读 · 0 评论 -
面向对象特性:封装,面向对象编程优点的总结
封装的概念封装中装的概念代表类或者对象内部可以装入数据属性或者函数属性封的概念代表隐藏封装的意义封装的意义又分三层第一层:利用类或者对象调用相应的类或对象的方法,调用者不能知晓其内部逻辑,例如在实例化的时候__init__()方法有没有执行别的操作调用者是不知道的#fengzhuang文件中class People: star = "earth" def __i...原创 2019-07-11 19:09:39 · 1277 阅读 · 0 评论 -
面向对象特性:多态
多态的概念类的多态是类的重要特性,它可以让实例在调用他们的共同属性时不考虑具体的类,体现的是一种运行时的绑定关系(动态绑定)类的多态体现在同一个类实例化出来的对象调用同一个方法,执行的逻辑不相同注意:体现类的多态有两个条件:1.有子类的继承 2.子类需要调用这个方法所以,多态算是继承的实现细节多态的实现#不同的类实例化出来的对象调用同一个方法实现的逻辑不同,这体现了类的多态class...原创 2019-07-11 17:07:13 · 115 阅读 · 0 评论 -
面向对象特性:继承
单继承与多继承Python中类的继承分为单集成和多继承#继承例子class ParentClass1: passclass ParentClass2: passclass SubClass1(ParentClass1): 这个是单继承,即只继承了一个父类的属性 passclass SubClsabb2(ParentClass1, ParentClas...原创 2019-07-09 22:01:13 · 183 阅读 · 0 评论 -
利用组合和继承的知识实现选课系统
需求:1.可以创建学员或者老师2.学校关联课程3.课程关联老师4.学生创建时要选择学校并选择班级5.学生和老师的实例要储存起来,以后还能调用出来(要求不同学生分开名字储存)import hashlibimport pickleimport timeimport osclass Filename:#利用时间戳完成命名 def Name(self): f...原创 2019-07-10 09:57:19 · 261 阅读 · 0 评论 -
静态属性,类方法,静态方法
静态属性静态属性就是将类中的函数封装,实现像调用数据属性一样的方式调用函数属性,在python中利用@property语句实现封装的概念:使得调用者无法察觉到被调用对象的实现逻辑,就是对象的封装#不利用@property的方式class Room: def __init__(self, name, owner, width, length, height): sel...原创 2019-07-09 17:40:53 · 316 阅读 · 0 评论 -
面向对象编程
三大编程范式1.面向过程:大问题—小问题2.函数式:编程语言定义的函数+数学意义上的函数3.面向对象不同的风格在不同的场景有自己的应用面向对象设计#狗的特征dog1 = {"name": "Alex", "gender": "母", "type": "藏獒"}human = {"name": "CJJ", "gender": "female", "type": "人类"}#...原创 2019-07-05 17:05:54 · 110 阅读 · 0 评论 -
面向对象编程的注意事项
类名规范要求大写函数名的规范是动词+名词不要去修改底层的函数字典,虽然可以实现但不要修改例如class Home: def __init__(self, name, age, gender): self.name = name self.age = age self.gender = gender country = "中...原创 2019-07-06 10:24:38 · 288 阅读 · 0 评论 -
面向对象编程之属性的增删改查
类属性的增删改查class Home: def __init__(self, name, age, gender): self.name = name self.age = age self.gender = gender country = "中国" def eat_food(self, food): ...原创 2019-07-06 10:05:45 · 457 阅读 · 0 评论 -
hashlib模块
摘要算法,提供md5、sha方法,作用是将明文通过算法转为密文,注意不能反解用在密码保护,不能写明文的地方import hashlibobj = hashlib.md5()obj.update("hello".encode("utf-8"))#一个字符串和一段密文是对应的print(obj.hexdigest())#不论输入的位数是什么,结果的位数是固定的但这种情况可以被撞库破解,...原创 2019-07-05 15:45:52 · 119 阅读 · 0 评论 -
configparse模块
配置模块调试代码,针对配置文件的开发。以字典的形式配置文件内容import configparserconfig = configparser.ConfigParser()config["DEFAULT"] = {"serverAlive Interval":"45", "Compression":"yes", ...原创 2019-07-05 12:01:00 · 117 阅读 · 0 评论 -
logging模块
logging模块是关于日志的模块日志有五个级别,打印日志时会打印确定的级别和更高级别的信息,级别:C>E>W>I>D>NOTSET,默认级别是warning级别。import logginglogging.debug("debug message")logging.info("info message")logging.warning("warning ...原创 2019-07-05 10:06:04 · 118 阅读 · 0 评论 -
os模块
os模块一般用来处理文件的目录os.getcwd()获取当前工作目录import osprint(os.getcwd())os.chdir()改变当前工作目录import osprint(os.getcwd())os.chdir("可视化")#此处可视化是一个文件夹print(os.getcwd())使用os.path.chdit("…")语句可以返回上一层即返回当前...原创 2019-07-04 10:43:10 · 120 阅读 · 0 评论 -
Python模块相关内容
模块基础内容模块的概念:为了易维护性,把很多函数分组,分别放在不同文件里,在Python中一个.py文件就可以被称为一个模块(module),一般一个模块内函数的功能相近或者处理的内容有很强相关性。使用模块的好处:1.代码的可维护性 2.一个模块编写完毕可以被其他地方引用 3.使用模块可以避免函数名和变量名冲突的问题,相同名字的函数和变量完全可以分别存在不同的模块中模块的种类:1.Pytho...原创 2019-01-18 14:46:40 · 142 阅读 · 0 评论