# ===== CodeLab: Python 3.11 新特性:性能飞跃、异常组与 tomllib =====
# 来源: https://aoerliang.dpdns.org/articles/python-311-features
# 以下代码片段按文章出现顺序拼接, 共 5 段

# ----- 片段 1 (python) -----
import time

def fib(n):
    if n < 2:
        return n
    return fib(n - 1) + fib(n - 2)

start = time.perf_counter()
print(fib(32))
print(f"耗时 {time.perf_counter() - start:.3f}s")

# ----- 片段 2 (python) -----
def validate(data):
    errors = []
    if "name" not in data:
        errors.append(ValueError("缺少 name"))
    if "age" not in data:
        errors.append(ValueError("缺少 age"))
    if "email" not in data:
        errors.append(TypeError("缺少 email"))
    if errors:
        raise ExceptionGroup("表单校验失败", errors)

try:
    validate({"name": "小明"})
except* ValueError as eg:
    print(f"值错误: {eg.exceptions}")
except* TypeError as eg:
    print(f"类型错误: {eg.exceptions}")

# ----- 片段 3 (python) -----
import tomllib

with open("pyproject.toml", "rb") as f:
    data = tomllib.load(f)

print(data["project"]["name"])
print(data["project"]["dependencies"])

# ----- 片段 4 (python) -----
from typing import Self

class Stack:
    def __init__(self):
        self.items: list[int] = []

    def push(self, item: int) -> Self:
        self.items.append(item)
        return self

s = Stack().push(1).push(2).push(3)
print(s.items)  # [1, 2, 3]

# ----- 片段 5 (bash) -----
# pyenv 安装并创建虚拟环境
pyenv install 3.11.11
pyenv virtualenv 3.11.11 myproj
pyenv activate myproj

# 验证并升级 pip
python3.11 --version
python3.11 -m pip install --upgrade pip
