1. 订单簿数据结构初始化
任务说明
本案例用 Python 的字典与列表构建一个最基础的订单簿:内部维护买单列表 bids 与卖单列表 asks,并提供初始化方法把订单簿重置为空。每笔订单用字典表示,包含价格 price 和数量 size。
数据结构设计
- 订单簿整体:
{"bids": [...], "asks": [...]},用字典承载两个方向。 - 单笔订单:
{"price": float, "size": float}。 - 买单列表
bids、卖单列表asks均为列表,初始化后为空。
完整实现
class OrderBook:
"""基础订单簿:用字典保存买单和卖单列表。"""
def __init__(self):
# 初始化方法:把订单簿重置为空
self.data = {"bids": [], "asks": []}
def reset(self):
# 复用初始化逻辑,清空所有订单
self.__init__()
def add_bid(self, price, size):
self.data["bids"].append({"price": float(price), "size": float(size)})
def add_ask(self, price, size):
self.data["asks"].append({"price": float(price), "size": float(size)})
def snapshot(self):
# 返回当前订单簿的浅拷贝,便于查看
return {
"bids": list(self.data["bids"]),
"asks": list(self.data["asks"]),
}
if __name__ == "__main__":
book = OrderBook()
# 1. 初始化后应为空
assert book.data == {"bids": [], "asks": []}
print("初始化后:", book.snapshot())
# 2. 添加订单
book.add_bid(100.5, 2)
book.add_bid(99.0, 1.5)
book.add_ask(101.0, 3)
print("添加订单后:", book.snapshot())
# 3. 重置后应再次为空
book.reset()
assert book.data == {"bids": [], "asks": []}
print("重置后:", book.snapshot())
运行方式
python order_book.py
验证与通过条件
- 脚本无异常退出,说明
__init__、add_bid、add_ask、reset均可正常调用。 - 两个
assert均通过:初始化后与重置后data都等于{"bids": [], "asks": []}。 - 打印的“添加订单后”快照中,
bids含 2 条、asks含 1 条,且每条都是{"price": ..., "size": ...}结构。