一. 模块
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
来源: http://www.bubuko.com/infodetail-2700425.html