当前位置: 首页 > article >正文

【python 类型注解详解】

在 Python 中,类型注释(Type Annotations)允许你为变量、函数参数和返回值指定类型信息。预定义变量选项通常指的是在代码中预先定义一些可能的变量值,并在类型注释中使用这些预定义的值。

1. 使用 Literal 类型

Literal 类型允许你指定一个变量只能是某些特定的字面量值。这在处理枚举值或预定义选项时非常有用。

from typing import Literal

# 预定义的选项
Option = Literal["option1", "option2", "option3"]

def process_option(option: Option):
    ...

process_option("option1")
process_option("option4")

2. 使用 Enum 类型

Enum 类型是另一种常见的预定义变量选项的方式。它允许你定义一组命名的常量。

from enum import Enum

class Options(Enum):
    OPTION1 = "option1"
    OPTION2 = "option2"
    OPTION3 = "option3"

def process_option(option: Options) -> None:
    ...

process_option(Options.OPTION1)
process_option('option1')

3. 使用 Union 类型

如果你有多个可能的类型,可以使用 Union 类型来指定变量可以是这些类型中的任何一个。

from typing import Union

# 预定义的选项
Option = Union[int, str]

def process_option(option: Option) -> None:
    ...

process_option(123)
process_option("option1")

4. 使用 TypedDict 类型

如果你需要处理预定义的字典结构,可以使用 TypedDict 类型。

from typing import TypedDict

class User(TypedDict):
    name: str
    age: int
    role: Literal["admin", "user", "guest"]

def process_user(user: User) -> None:
    ...

user1: User = {"name": "Alice", "age": 30, "role": "admin"}
process_user(user1)

user2: User = {"name": "Bob", "age": 25, "role": "user"}
process_user(user2)

user3: User = {"name": "Charlie", "age": 20, "role": "guest"}
process_user(user3)

总结

  • Literal: 用于指定变量只能是某些特定的字面量值。

  • Enum: 用于定义一组命名的常量。

  • Union: 用于指定变量可以是多个类型中的任何一个,也可以用 `|`, int | str | None。

  • TypedDict: 用于定义预定义的字典结构。

这些类型注释工具可以帮助你在代码中更清晰地表达变量的预期值,并提高代码的可读性和可维护性。


http://www.kler.cn/news/314024.html

相关文章:

  • 基于神经网络的光线追踪
  • 2024最新!!!iOS高级面试题,全!(一)
  • STM32(十五):I2C通信
  • PostgreSQL数据库怎么生成一个随机的UUID
  • K8S介绍+集群部署
  • Django视图:构建动态Web页面的核心技术
  • 伊犁职业技术学院linux 部署教学用首先创建两台linux 主机
  • springboot实战学习笔记(2)
  • MyBatis框架SqlSession浅析
  • Elastic 的 OpenTelemetry PHP 发行版简介
  • RealityCapture1.4设置缓存和设置重置
  • Python 二级考试
  • 2409js,学习js2
  • Th:1.1 建立连接
  • 6-3 Java异常处理
  • JVM运行区域介绍
  • 进程间通信的七种方法实战演示!值得收藏!
  • Matlab求解微分方程(解析解与数值解)
  • 利士策分享,华为三折叠手机:重塑未来科技生活的里程碑
  • 【高等代数笔记】线性空间(五-九)
  • module ‘urllib.request‘ has no attribute ‘urlencode‘ 问题解决
  • LeetCode2414题: 最长的字母序连续子字符串的长度(原创)
  • 【数据结构-差分】力扣1589. 所有排列中的最大和
  • 十三、SOA(企业服务总线ESB架构实现)
  • JVM 一个对象是否已经死亡?
  • Invalid Private Key, Not a valid string or uint8Array
  • jQuery国内大厂CDN加速链接
  • 741. 摘樱桃
  • JVM 案例研究与实战经验
  • 硬件工程师笔试面试——滤波器