# ===== CodeLab: Python 3.9 新特性:字典合并运算符与类型提示泛型 =====
# 来源: https://aoerliang.dpdns.org/articles/python-39-features
# 以下代码片段按文章出现顺序拼接, 共 6 段

# ----- 片段 1 (python) -----
a = {"x": 1, "y": 2}
b = {"y": 3, "z": 4}

merged = a | b        # 返回新字典,不修改 a、b
print(merged)         # {'x': 1, 'y': 3, 'z': 4}

a |= b                # 就地合并,等价于 a.update(b)
print(a)              # {'x': 1, 'y': 3, 'z': 4}

# ----- 片段 2 (python) -----
defaults = {"host": "localhost", "port": 3306, "debug": False}
user_cfg = {"port": 5432}

final = defaults | user_cfg
print(final)  # {'host': 'localhost', 'port': 5432, 'debug': False}

# ----- 片段 3 (python) -----
def first_word(words: list[str]) -> str:
    return words[0] if words else ""

scores: dict[str, int] = {"math": 90, "english": 85}

from typing import Optional

def find_user(uid: int) -> Optional[dict]:
    """注意:dict | None 联合类型要等 3.10,3.9 请用 Optional"""
    ...

# ----- 片段 4 (python) -----
name = "HelloWorld.txt"
print(name.removeprefix("Hello"))   # World.txt
print(name.removesuffix(".txt"))    # HelloWorld
print(name)                         # HelloWorld.txt,原字符串不变

# ----- 片段 5 (python) -----
from datetime import datetime
from zoneinfo import ZoneInfo

now = datetime.now(ZoneInfo("Asia/Shanghai"))
print(now)  # 2026-08-05 13:06:00+08:00

tokyo = now.astimezone(ZoneInfo("Asia/Tokyo"))
print(tokyo)  # 自动换算时区

# ----- 片段 6 (bash) -----
# 安装并启用 3.9
pyenv install 3.9.21
pyenv local 3.9.21

# 验证并准备独立环境
python3.9 --version
python3.9 -m pip install --upgrade pip
python3.9 -m venv .venv
source .venv/bin/activate
