python自动化_day8_socket网络编程
基础数据类型,for循环,文件操作,函数,模块,面向对象等知识点归纳
1 # 基础数据类型 2 # int float 加减乘除 乘方取余 小数的保留 round 3 # 都可以存放任意的数据类型,增删改查 4 # str list tuple 序列 -----index 5 # 字符串 split strip startswith join 6 # dict set 散列 无序的 通过key获取值
1 #for循环 while循环 if条件语句 2 #for循环 你知道要循环多少次 3 #while循环 不知道循环多少次 4 #条件判断 无数个if语句只有一个分支会被执行
1 #文件操作 2 #打开模式 3 #a w r -----直接对字符串操作 4 #ab wb rb --直接对字节操作 5 #操作系统的编码和python编码不一致的问题
1 #函数 2 #函数的基础: 3 # 定义:关键字 4 #参数:位置参数 *args 默认参数(关键字参数) **kwargs 返回值 5 #调用:关键字:函数名(),参数:按照位置传,按照关键字传,接收返回值 6 #函数的命名空间: 7 #函数的内部可以使用外部的变量:读,写,改,声明:global改全局,nonlocal改局部 8 #在外部不能使用函数内部的变量 9 #闭包-----装饰器: 10 #是在函数的前后添加功能 11 #用别人写好的装饰器 12 #生成器函数-----------迭代器----------生成器表达式---------列表推导式 13 #yield写代码的时候尽量用,很好的节省内存 14 #生成器表达式和列表推导式能够很好的简化代码 15 #生成器函数的特点:调用不执行----面试之前看就可以 16 #递归函数: 17 #大部分的递归函数都可以用循环实现 18 #递归相比于循环来说并不能节省内存,占用更多的空间
1 #模块 2 #内置模块 3 #collections namedtuple 有序字典 默认字典 4 #os 文件和文件夹的操作 和路径相关的 执行操作系统命令的 5 #sys 6 #random 随机整数 随机小数 随机抽取 打乱顺序 7 #time 三种时间格式:字符串(格式化时间) 元组(结构化时间) float(时间戳) 8 #re 正则:写爬虫需要自己弄 findall search match 9 #序列化: 数据的序列化 (pickle json):dump load dumps loads shelve 10 #hashlib 摘要算法的模块 文件的一致性校验 加密认证 MD5算法和sha算法 11 #logging 日志模块 12 #configpaser -------什么忘了。。。。。。 13 #扩展模块 :没有讲呢 14 #自定义模块: 15 #模块和包
1 #面向对象: 2 #基础的定义 3 #类 对象 实例化 4 #class的定义 语法 5 #三大特性:继承**** 封装***带双划线的都是私有的不能外部使用 多态 6 #继承的规则 子类可以使用父类中的所有非私有的名字,前提是子类没有 7 #多继承的查找顺序问题:经典类 :深度优先 新式类里 : 广度优先 8 #super不是单纯的寻找父类,而是遵循mro(广度优先算法)顺序 9 #封装 10 #私有的属性既不能被继承,也不能从类的外部调用 11 #多态:python自带多态 12 #组合:一个类的对象作为另外一个类对象的属性 13 #反射:hasattr getattr 用字符串的形式来获取变量 14 #内置方法:__new__ python中类的构造方法,创造了对象在init之前执行,单例模式。
异常处理:语法错误和逻辑错误
常用异常包括:
1 # AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x 2 # IOError 输入/输出异常;基本上是无法打开文件 3 # ImportError 无法引入模块或包;基本上是路径问题或名称错误 4 # IndentationError 语法错误(的子类) ;代码没有正确对齐 5 # IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5] 6 # KeyError 试图访问字典里不存在的键 7 # KeyboardInterrupt Ctrl+C被按下 8 # NameError 使用一个还未被赋予对象的变量 9 # SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了) 10 # TypeError 传入对象类型与要求的不符合 11 # UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量, 12 # 导致你以为正在访问它 13 # ValueError 传入一个调用者不期望的值,即使值的类型是正确的
# try: # print('123') # int('a') # print('222') # except ValueError as e: #使用as之后可以把错误显示出来 # print(e,'报错了') # except IndexError: # print('报错了') # except Exception as e: # print(e,'很多错了') # except :print('错') #try #except #except as #except Exception as e: ---推荐使用 #找到一个满足条件的其他分支都不走了 #程序中会有很多预料不到的错误 使用万能异常 #万能异常太万能不好提示,针对性错误提示可以更人性化 #所有错误提示完之后再添加一个万能异常,针对性错误走完之后再走。 #具体的异常处理+万能异常 #能够使用提前预料到的异常都应该用具体的异常去处理,剩下其他的异常用万能异常控制 #万能异常应该在最后
1 try:pass 2 except ValueError:print('') 3 except Exception as e:print(e)#处理所有的异常 4 else:pass #try中的代码没有错误执行这个else 5 finally:pass #无论如何都会执行 6 # assert 1 == 2 #断言 满足条件就执行
模块介绍:
1 #导入一个模块,就相当于执行了这个文件 2 #一个模块如果执行多次import 相当于执行一次 3 #import 和from import 的区别 4 #模块之间不能发生循环引用 5 6 #import 一个模块,那么在当前的全局命名空间中,就有了一个名字 7 #这个名字会指向属于自己的空间,空间里存储了所有文件中的名字 8 # from my_module import func 9 # import my_module 10 #from import 11 #仍会执行整个文件 12 #文件中的名字会被存储在一块独立的内存空间中 13 #import后面的名字会出现在全局 14 #相当于对独立命名空间中的一个引用 15 #from import也支持as语句 也支持 导入多个名字 16 #from import * 相当于导入所有名字 17 18 19 #__all__=['money'] 和 from import * 互相影响 20 #导入模块的顺序 :内置 扩展 自定义
socket
import socket ########################tcp-server##################### # sk = socket.socket() # sk.bind(('127.0.0.1',9000)) # sk.listen() # while True: # conn,addr = sk.accept() ###等待来电 三次握手完毕 # while True: # inp = input('') # conn.send(inp.encode('utf-8')) ##发送数据 # if inp == 'q':break # ret = conn.recv(1024).decode('utf-8') ###接收数据 # print(ret) # if ret == 'q':break # conn.close() # sk.close() ##########################tcp-client############################## # sk = socket.socket() # sk.connect(('127.0.0.1',9000)) # while True: # ret = sk.recv(1024).decode('utf-8') # print(ret) # if ret == 'q':break # inp = input('') # sk.send(inp.encode('utf-8')) # if inp == 'q': break # sk.close()
1 #########################udp-server###################### 2 # sk = socket.socket(type=socket.SOCK_DGRAM) 3 # sk.bind(('127.0.0.1',8999)) 4 # while True: 5 # msg,addr = sk.recvfrom(1024) 6 # print(msg.decode('utf-8'),addr) 7 # inp = input('>>>') 8 # sk.sendto(inp.encode('utf-8'),addr) 9 # sk.close() 10 11 #########################udp-client############################### 12 # sk = socket.socket(type=socket.SOCK_DGRAM) 13 # while True: 14 # inp = input('>>>') 15 # sk.sendto(inp.encode('utf-8'),('127.0.0.1',8999)) 16 # msg,addr = sk.recvfrom(1024) 17 # print(msg.decode('utf-8')) 18 # sk.close()
1 ################################粘包-server###################################### 2 # from socket import * 3 # sk=socket() 4 # sk.bind(('127.0.0.1',8080)) 5 # sk.listen(5) 6 # conn,addr=sk.accept() 7 # data1=conn.recv(10) 8 # data2=conn.recv(3) 9 # print('----->',data1.decode('utf-8')) 10 # print('----->',data2.decode('utf-8')) 11 # conn.close() 12 # sk.close() 13 #粘包只会发生在tcp协议中 14 #在连续send中才会发生粘包现象 15 #tcp传输中有三种机制: 16 #回执 机制 保证数据能够被完整的发送 17 #数据包过大 自动拆分的机制 18 #数据包过小 自动合并的机制 19 20 21 #########################粘包-client############################### 22 # BUFSIZE=1024 23 # ip_port=('127.0.0.1',8080) 24 # s=socket.socket() 25 # res=s.connect_ex(ip_port) 26 # s.send('hello'.encode('utf-8')) 27 # s.send('egg'.encode('utf-8')) 28 # s.close()
1 ###############################解决粘包问题-server############################### 2 # sk = socket.socket() 3 # sk.bind(('172.0.0.1',8080)) 4 # sk.listen() 5 # 6 # coon,addr = sk.accept() 7 # coon.send(b'11') 8 # coon.send(b'hello world') 9 # coon.send(b'alex') 10 # coon.close() 11 # sk.close() 12 #############################struck模块################################### 13 # import struct 14 # 15 # sk = socket.socket() 16 # sk.bind(('172.0.0.1',8080)) 17 # sk.listen() 18 # 19 # coon,addr = sk.accept() 20 # inp = input('>>>').encode('utf-8') 21 # ret = struct.pack('i',len(inp)) 22 # coon.send(ret) 23 # coon.send(inp) 24 # coon.close() 25 # sk.close() 26 27 28 ############################ 解决粘包问题################## 29 import struct 30 sk = socket.socket() 31 sk.connect(('127.0.0.1',8080)) 32 33 num = sk.recv(4).decode('utf-8') 34 num = struct.unpack('i',num)[0] 35 print(sk.recv(num)) 36 sk.close()