Python的TypedDict基本用法

作者:

文章目录
  • 目录
    • 一、基本用法
      • 1、定义TypedDict
      • 2、在函数中使用
      • 3、可选字段处理
      • 4、注意事项
        • (1)不强制校验
        • (2)不能在其中定义方法
    • 二、常见应用场景
      • 1、校验API的响应格式
        • 2、函数结构化返回值

                TypeDict(Python中类型安全的字典)是Python 3.8引入的类型提示工具,用于定义具有固定键集合各键对应特定类型的字典对象。它允许你为字典的每个键指定值的类型,使静态类型检查器能够更准确地验证字典的使用方式。其核心特点如下:

        特点 说明
        字典的键是预定义的字符串 必须提前定义好所有键的名称和类型
        每个键都有对应的值类型 每个键的值都有明确的类型约束
        支持必需字段和可选字段 可以定义哪些字段必须提供,哪些可选
        运行时不强制类型检查 Python运行时不验证类型,但mypy等工具可以静态检查

        • Python 3.8+ 直接使用 from typing import TypedDict
        from typing import TypedDict
        class User(TypedDict):
            name: str
            age: int
            is_active: bool
        # 创建符合TypedDict定义的字典(在注解中声明)
        user: User = {
            "name": "张三",
            "age": 30,
            "is_active": True
        }

        def get_user_info(user: User) -> str:
            return f"用户名:{user['name']},年龄:{user['age']}"
        print(get_user_info(user))  # 输出:用户名:张三,年龄:30

        (1)使用tool=False

        class PartialUser(TypedDict, total=False):
            name: str
            age: int
            email: str
        # 所有字段都是可选的
        partial_user: PartialUser = {
            "name": "李四"
            # age和email可以不提供
        }

        (2)使用NotRequired

        from typing_extensions import NotRequired
        class UserProfile(TypedDict):
            name: str                    # 必需字段
            age: int                     # 必需字段
            email: NotRequired[str]      # 可选字段
            phone: NotRequired[str]      # 可选字段
        # 可以不包含可选字段
        profile1: UserProfile = {
            "name": "王五",
            "age": 25
        }
        # 也可以包含可选字段
        profile2: UserProfile = {
            "name": "赵六",
            "age": 28,
            "email": "zhaoliu@example.com"
        }

        # 下面这段代码在运行时不会报错
        # 但mypy等静态检查器会发出警告
        user: User = {
            "name": "错误",  # 这是str,没问题
            "age": "三十",    # 应该是int,类型错误!
            "is_active": True
        }
        

        # TypedDict只能定义键的类型,不能定义方法
        class BadExample(TypedDict):
            name: str
            def greet(self) -> str:  # 错误!不允许方法
                return "Hello"
        

        class APIResponse(TypedDict):
            success: bool
            data: NotRequired
        ] error: NotRequired[str] def process_response(response: APIResponse) -> None: if response["success"]: if "data" in response: print(f"处理数据:{response['data']}") else: if "error" in response: print(f"错误信息:{response['error']}") # 使用示例 success_resp: APIResponse = { "success": True, "data": [{"id": 1, "name": "商品1"}] } error_resp: APIResponse = { "success": False, "error": "认证失败" }

        class AnalysisResult(TypedDict):
            status: str
            score: float
            details: dict
        def analyze_text(text: str) -> AnalysisResult:
            # 模拟分析逻辑
            return {
                "status": "completed",
                "score": 0.85,
                "details": {"length": len(text), "words": len(text.split())}
            }
        result = analyze_text("这是一段测试文本")
        # result的类型被明确为AnalysisResult,IDE可以提供智能提示

        到此这篇关于Python的TypedDict基本用法的文章就介绍到这了,更多相关Python的TypedDict内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

        站内搜索