一.模块
1.什么是模块
一些功能的集合,写好的方法 导入可以直接使用的,在python中模块都是python文件
2.为何要使用模块
节省内存 分门别类
3.模块的种类
内置模块 扩展模块 自定义模块
4.模块和脚本
脚本是执行某个文件的时候 模块不是直接执行的,而是在程序中被引用的文件
5.自定义模块
命名规范:数字字母下划线 不能以数字开头
导入的时候相当于执行了这个模块所在的文件。不能被多次导入 因为导入的情况都在sys.modules中记录起来了
6.模块的使用
import 模块名 #可as起别名 可一行导入多个模块
form 模块名 import 变量名 #可用as给变量起别名 import 导入全部变量名,可用__all__限制
7.使用模块的注意事项
模块之间不能出现循环引用
模块的加载与修改(importlib)
把模块当做脚本来执行*(name)*
模块搜索路径(sys.path)
二.包 1.什么是包 带着一个__init__文件的文件夹就是一个包,包里放其它模块 2.包的使用 import 包名 #导入一个包 意味着 执行这个包里的__init__方法 from...import
三.异常处理 try: #可能出异常的代码 except 错误类型: 针对这个错误的处理方式 except Exception as e: # 万能异常 只能写在所有异常的最后 print(e) else: print('如果try中的代码没有发现异常 就执行') finally: print('无论如何都要执行')****
2.自定义异常 完成一个功能,在完成的过程中有一些特定的异常,这些异常不在内置的异常类型范围内 class ccException(BaseException): def init(self,msg): self.msg=msg try: raise ccException('类型错误') except ccException as e: print(e)
四:网络编程
1.机器上的一个程序 和另外一台机器上的一个程序之间的通信叫网络编程
server:
import socket
sk = socket.socket()
sk.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
sk.bind(('127.0.0.1',8899))
sk.listen() # 开始监听别人的链接
while True:
conn,addr = sk.accept()# 三次握手的过程,阻塞
while True:
msg = input('>>>').encode('utf-8')
conn.send(msg) #发送
if msg == b'q':break
ret = conn.recv(1024) #接收
if ret == b'q':break
print(ret.decode('utf-8'))
conn.close() #挥手
sk.close()
client: import socket sk = socket.socket() sk.connect(('127.0.0.1',8899)) while True: msg = sk.recv(1024).decode('utf-8') if msg == 'q':break print(msg) inp = input('>>>') sk.send(inp.encode('utf-8')) if inp == 'q':break sk.close()
2.粘包 粘包现象:由于tcp协议对数据有拆包和包的机制,所以导致数据与数据之间是没有条与条之间的限制的,接收到的数据就有可能粘在一起 粘包的解决:struct.pack struct.unpack