1. 订单簿数据结构初始化

任务说明

本案例用 Python 的字典与列表构建一个最基础的订单簿:内部维护买单列表 bids 与卖单列表 asks,并提供初始化方法把订单簿重置为空。每笔订单用字典表示,包含价格 price 和数量 size。

数据结构设计

  • 订单簿整体:{"bids": [...], "asks": [...]},用字典承载两个方向。
  • 单笔订单:{"price": float, "size": float}。
  • 买单列表 bids、卖单列表 asks 均为列表,初始化后为空。
OrderBook (dict) bids : list {price, size} {price, size} asks : list {price, size} {price, size} 买/卖

完整实现

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": ...} 结构。