Python中typing模块与类型注解的使用方法

  • Post category:Python

下面就给大家详细讲解一下Python中typing模块与类型注解的使用方法。

什么是typing模块?

typing是Python 3.5及以后版本中的标准库模块,旨在提供一套标准的类型标注工具,以增强代码的可读性、可维护性和独立性。

类型注解与类型提示

在python 3.5及以上的版本中,可以使用类型注解(type annotation) 与类型提示(type hinting) 对函数的参数及返回值进行类型标注。其形式如下:

def func(arg1: type1, arg2: type2) -> return_type:
    pass

其中,参数及返回值的类型都可以是Python中任意对象,包括定于的类、基础类型、typing中定义的类型以及联合类型和可选类型。

基础类型的类型标注示例

def volume_of_cuboid(width: int, length: int, height: int) -> int:
    return width * length * height

此处,我们将输入的参数类型都设为 int, 输出的返回值类型也设为int。

Typing 中定义的类型示例

from typing import List

def merge_sorted_lists(list1: List[int], list2: List[int]) -> List[int]:
    return sorted(list1 + list2)

此处,我们通过导入List来使用 Typing 中定义的泛型类型List[int]表示输入的两个列表中保存的是整数类型的元素,并且输出的返回值同样是List[int] 类型的。

更加复杂的类型标注方法

在一些情况下,我们需要给参数设定更加复杂的类型限定。这时,Typing提供了许多更加高级的类型工具。

联合类型

联合类型用于描述输入的参数的类型可能为多种情况之一的情况。如:

def double_value(x: Union[float, int]) -> Union[float, int]:
    return x * 2

在此处,我们用 Union[float, int] 表示输入的参数可能是 float 类型或者 int 类型中的一种。

可选类型(Optional)

有一些参数可能不是必须的,这时我们可以使用 Optional 来定义可选类型。如:

from typing import Optional

def meaning_of_life(age: Optional[int]) -> str:
    if age is None:
        return "So long and thanks for all the fish!"
    else:
        return "No, you are still too young!"

在此处,我们用 Optional[int] 表示输入的参数可能是 int 类型或者 None 。

通用类型变量

通用类型变量用于表示一个泛型类型,以便在参数声明中忽略具体的类型,并在函数内更加灵活地进行泛型参数类型的操作。

from typing import TypeVar, List

T = TypeVar('T')

def first_elem(arr: List[T]) -> T:
    return arr[0]

在此处,我们定义了通用类型变量 T ,并在函数的参数列表和返回值中使用该变量,其含义是:传入的参数是一个列表list,列表中的元素可以是任意类型,返回值也是一个任意类型的元素。

总结

Typing模块与类型注解是Python中的新特性,使用该特性可以在代码中标注函数参数和返回值的类型。Typing 模块提供了许多更加智能强大的类型定义方式,利用这些定义方式可以有效地提高代码的可读性、可维护性和可靠性。