广告位联系
返回顶部
分享到

Python中的typing模块常见用法介绍

python 来源:互联网 作者:佚名 发布时间:2024-09-24 21:40:19 人浏览
摘要

typing模块是 Python 提供的一个标准库,主要用于为函数、变量和类定义类型提示(Type Hints),从而提高代码的可读性和类型安全性。虽然 Python 是动态类型语言,但通过typing模块,开发者可以明

typing 模块是 Python 提供的一个标准库,主要用于为函数、变量和类定义类型提示(Type Hints),从而提高代码的可读性和类型安全性。虽然 Python 是动态类型语言,但通过 typing 模块,开发者可以明确指定变量和函数的参数、返回值的类型,帮助 IDE 或静态代码分析工具提供更好的代码提示和错误检查。虽然 Python 本身不会强制执行这些类型检查,但借助 mypy 等工具,可以进行静态类型分析,帮助发现潜在问题。

源码位置:D:\Python310\Lib\typing.py

一.常见类型提示

1.List 和 Dict

用于表示列表和字典类型。

(1)List[type] 表示一个包含特定类型元素的列表。

(2)Dict[key_type, value_type] 表示键和值有特定类型的字典。

2.Tuple

表示一个包含特定类型的元组。Tuple[type1, type2] 表示一个包含两个特定类型的元组。

3.Optional

表示变量可以是某种类型,也可以是 None。Optional[type] 等价于 Union[type, None],表示某个值可以是 type 或 None。

4.Union

表示一个变量可以是多个类型之一。Union[type1, type2, ...] 表示变量可以是 type1、type2 等中的任意一种。

5.Any

表示可以是任意类型。Any 用于声明一个变量可以是任意类型,不做类型检查。

6.Callable

表示可调用的对象,如函数。Callable[[arg_type1, arg_type2], return_type] 用于表示一个函数,参数类型为 arg_type1、arg_type2,返回值类型为 return_type。

7.TypeVar

用于定义泛型。TypeVar 用于创建通用函数或类。

8.Literal

限制变量值为某些特定的值。

9.Set

表示一个包含特定类型元素的集合。比如 Set[str] 表示一个字符串集合。

10.FrozenSet

表示一个不可变的集合。比如 FrozenSet[int] 表示一个不可变的整数集合。

11.Generic

用于创建泛型类和泛型接口。比如 class MyList(Generic[T]) 表示一个泛型列表类,可以存储类型 T 的元素。

12.Type

表示一个类型对象。比如 Type[str] 表示 str 类型。

二.常见用法

1.List|Dict|Tuple示例

1

2

3

4

5

6

7

8

9

10

from typing import List, Dict, Tuple

# 一个返回包含字符串的列表的函数

def get_names() -> List[str]:

    return ["Alice", "Bob", "Charlie"]

# 一个带有字典类型提示的函数

def get_person_data() -> Dict[str, int]:

    return {"Alice": 30, "Bob": 25}

# 一个带有元组类型提示的函数

def get_coordinates() -> Tuple[int, int]:

    return (10, 20)

  • get_names():返回一个 List[str],即一个字符串列表。
  • get_person_data():返回一个 Dict[str, int],表示字典的键是字符串,值是整数。
  • get_coordinates():返回一个 Tuple[int, int],即一个包含两个整数的元组。

2.Optional 示例

1

2

3

4

5

from typing import Optional

def find_user(user_id: int) -> Optional[str]:

    if user_id == 1:

        return "Alice"

    return None

find_user():返回类型是 Optional[str],表示可能返回字符串,或者返回 None。

3.Union 示例

1

2

3

4

5

from typing import Union

def process_input(data: Union[int, str]) -> str:

    if isinstance(data, int):

        return f"Received an integer: {data}"

    return f"Received a string: {data}"

process_input():参数类型是 Union[int, str],表示该函数接收整数或字符串两种类型。

4.Callable 示例

1

2

3

4

5

6

7

8

from typing import Callable

# 定义一个函数接收另一个函数作为参数

def execute_task(task: Callable[[int, int], int], a: int, b: int) -> int:

    return task(a, b)

# 示例调用

def add(x: int, y: int) -> int:

    return x + y

result = execute_task(add, 3, 4)  # 返回 7

execute_task():接收一个可调用对象(函数),该对象接收两个整数并返回一个整数。

5.TypeVar 泛型示例

1

2

3

4

5

6

7

from typing import TypeVar, List

T = TypeVar('T')

def get_first_element(lst: List[T]) -> T:

    return lst[0]

# 使用时可以是不同的类型

print(get_first_element([1, 2, 3]))      # 返回 1

print(get_first_element(['a', 'b', 'c']))  # 返回 'a'

TypeVar:允许定义一个泛型函数 get_first_element,它可以适用于任何类型的列表。

三.高级用法

1.Literal 示例

1

2

3

4

5

6

7

8

9

from typing import Literal

def set_mode(mode: Literal['read', 'write']) -> None:

    if mode == 'read':

        print("Setting mode to read")

    elif mode == 'write':

        print("Setting mode to write")

set_mode('read')   # 合法

set_mode('write')  # 合法

set_mode('delete') # 非法,会被静态分析工具标记为错误

Literal:限制传入的值必须是特定的字面值,在此例中只能是 'read' 或 'write'。

2.TypedDict示例

1

2

3

4

5

6

from typing import TypedDict

class User(TypedDict):

    name: str

    age: int

def get_user() -> User:

    return {"name": "Alice", "age": 30}

TypedDict:用于定义字典的具体结构,使字典的键和值类型更加明确。

3.Protocol示例

用于定义接口协议,可以检查对象是否实现了特定的方法和属性。

1

2

3

4

from typing import Protocol

class Drawable(Protocol):

    def draw(self) -> None:

        ...

4.Final 示例

表示一个变量、方法或属性不能被重写或修改。

1

2

from typing import Final

MAX_SIZE: Final = 100

5.ClassVar 示例

表示一个类变量,它不应被视为实例变量的一部分。

1

2

3

from typing import ClassVar

class MyClass:

    class_var: ClassVar[int] = 42

6.NoReturn

表示函数不会返回任何值(通常用于函数抛出异常的情况)。

1

2

3

from typing import NoReturn

def terminate() -> NoReturn:

    raise SystemExit


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • Python报错ValueError: cannot convert float NaN to integer的解
    在Python编程中,我们经常需要处理各种数据类型,包括浮点数和整数。然而,有时候我们可能会遇到一些意外的情况,比如将一个包含NaN(
  • Python中的typing模块常见用法介绍

    Python中的typing模块常见用法介绍
    typing模块是 Python 提供的一个标准库,主要用于为函数、变量和类定义类型提示(Type Hints),从而提高代码的可读性和类型安全性。虽然
  • python创建字典(dict)的几种方法小结(含代码)
    字典(Dictionary)是Python中一种非常灵活的数据结构,用于存储键值对(key-value pairs)。在Python中创建字典有多种方法,每种方法都有其特定
  • 基于python实现动态烟雾效果的介绍
    动态烟雾效果常用于游戏和动画中,为场景增添 逼真的视觉效果。在这篇博客中,我们将使用Python和Pygame库来创建一个逼真的烟雾动画效果
  • Python pip更换清华源镜像

    Python pip更换清华源镜像
    在安装Python库时使用清华源镜像是为了改善库的下载速度和稳定性 地址:https://pypi.tuna.tsinghua.edu.cn/simple 命令安装 安装命令: 1 pip install 包
  • Python中xml.etree.ElementTree的使用
    xml.etree.ElementTree(简称ElementTree)是Python标准库中用于处理XML文件的模块。它提供了简洁且高效的API,适用于解析、创建和修改XML文档。在需
  • python中concurrent.futures的具体使用
    concurrent.futures是 Python 标准库中用于并行编程的高级模块,它提供了一种高级别的接口来管理线程和进程。通过这个模块,你可以轻松地利用
  • Python中跳出循环的两种方法

    Python中跳出循环的两种方法
    我们经常遇到循环在进行到某一个特定的值时,需要跳出循环,或跳过这个值,python中早已为我们准备了这样的参数:break,continue 比如下面的
  • 解决Python调用df.to_csv()出现中文乱码的问题

    解决Python调用df.to_csv()出现中文乱码的问题
    Python调用df.to_csv()出现中文乱码 1 2 3 4 df = pd.DataFrame(data=total_info, columns=[公司全名, 公司简称, 公司规模, 融资阶段, 区域, 职位名称, 工作经验
  • PyTorch池化层详解及作用

    PyTorch池化层详解及作用
    在深度学习中,池化层(Pooling Layer)是卷积神经网络(CNN)中的关键组成部分。池化层的主要功能是对特征图进行降维和减少计算量,同时
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计