类型注解
如果你学过 C++,你一定对这样的代码不陌生:
int a = 1;
float b = 3.14;
string c = "Hello World";在某些编程语言中,变量需要在定义时就指定其类型。这样会在一定程度上损失代码的自由,但是可以帮助我们弄清楚变量中究竟保存了什么。
在 Python 中,我们可以使用类型注解(Type Hints)来标注变量的类型,进而帮助程序员和编辑器识别。
注意
要使用本节介绍的所有语法,需要 Python 3.10 及以上版本。
基本使用
普通变量
a: int = 1
s: str = "Hello"只需要在变量名后面、等号前面加上 : 类型 即可。
事实上,在一般定义变量时指定类型的做法并不常见:如下图所示,在普通的变量定义中,编辑器通常可以通过我们给变量的初始赋值直接推断出变量类型。

函数定义
def func(name: str, age: int = 18) -> str:
return f'{name} is {age}.'在本例中,我们指定了:
- 参数
name的类型为 str - 参数
age的类型为 int,且默认值为18 - 函数的返回值类型为 str
类定义
我们可以在类的定义中指定属性名及其对应的类型:
class Student:
name: str
age: int
def __init__(self):
...特别说明的是,在类的定义中书写属性名,但不指定变量类型也不赋值的行为是非法的。你可以运行下方的代码查看报错:
运行代码
class Student:
name对于类的方法,类型注解的书写方式和函数定义相同,不再赘述。
复杂类型
容器类型
对于可以存储多个数据的容器类型,如 list tuple dict set 等,我们可以使用 Python 内置的 typing 库进一步指定其内部数据的类型:
from typing import List, Dict, Tuple, Set
# List[int] 表示这是一个只包含整数的列表
numbers: List[int] = [1, 2, 3, 4, 5]
# Dict[str, int] 表示这是一个键为字符串、值为整数的字典
student_scores: Dict[str, int] = {"Alice": 95, "Bob": 88}
# Tuple[int, str, bool] 表示这是一个包含整数、字符串、布尔值的元组
person_info: Tuple[int, str, bool] = (25, "Alice", True)
# Set[str] 表示这是一个只包含字符串的集合
unique_names: Set[str] = {"Alice", "Bob", "Charlie"}联合类型
如果某个变量可以取多种类型之一,请使用 Union:
from typing import Union
def func(var: Union[int, str]):
...在高版本 Python 中,Union 也可以写成下面这样(不需要额外 import):
def func(var: int | str):
...特别说明
类型注解仅在代码编写过程中供程序员和编辑器参考使用,不会在代码实际运行的过程中发挥限制作用。运行下面的代码不会报错:
a: int = '123'因此,你仍然需要通过异常捕获等方式检查函数的输入。
版权所有
版权归属:异想之旅