【python 类型注释】

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

1. 使用 Literal 类型

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

from typing import Literal

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

def process_option(option: Option) -> None:
    if option == "option1":
        print("Processing option 1")
    elif option == "option2":
        print("Processing option 2")
    elif option == "option3":
        print("Processing option 3")
    else:
        raise ValueError("Invalid 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:
    if option == Options.OPTION1:
        print("Processing option 1")
    elif option == Options.OPTION2:
        print("Processing option 2")
    elif option == Options.OPTION3:
        print("Processing option 3")
    else:
        raise ValueError("Invalid option")

process_option(Options.OPTION1)  # 正常调用
process_option("option1")        # 类型检查会报错

3. 使用 Union 类型

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

from typing import Union

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

def process_option(option: Option) -> None:
    if isinstance(option, int):
        print(f"Processing integer option: {option}")
    elif isinstance(option, str):
        print(f"Processing string option: {option}")
    else:
        raise ValueError("Invalid option")

process_option(123)       # 正常调用
process_option("option1") # 正常调用
process_option(123.45)    # 类型检查会报错

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:
    print(f"Name: {user['name']}")
    print(f"Age: {user['age']}")
    print(f"Role: {user['role']}")

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: 用于指定变量可以是多个类型中的任何一个。

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

放飞自我的Coder

你的鼓励很棒棒哦~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值