下面就给大家详细讲解一下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 模块提供了许多更加智能强大的类型定义方式,利用这些定义方式可以有效地提高代码的可读性、可维护性和可靠性。