全部学科
Python全栈
python
NodeJS全栈
nodejs
📝 1 篇文章 19 道配套习题

类型注解专题

专题说明

类型注解是Python增强代码可读性和可维护性的重要特性。本专题从基础类型注解出发,深入讲解Optional和Union泛型、集合泛型、自定义类型、Protocol协议、TypeVar泛型变量以及mypy类型检查工具,帮助学习者掌握Python静态类型编程的核心技能。

学习目标

  1. 掌握函数和变量的基本类型注解语法
  2. 理解Optional和Union的含义和使用场景
  3. 熟练使用List、Dict等集合泛型
  4. 了解TypeVar泛型变量和Protocol协议
  5. 掌握mypy类型检查工具的使用

学习内容

本专题涵盖以下核心知识点:

基础类型注解

  • 函数参数类型注解
  • 函数返回值类型注解
  • 变量类型注解
  • 类型注解的运行时行为

Optional与Union

  • Optional[T]的含义
  • Union[T1, T2]的用法
  • Python 3.10+的 | 语法
  • None与Optional的区别

泛型集合

  • List[T]、Dict[K, V]、Set[T]
  • Tuple[T1, T2]、Tuple[T, ...]
  • Iterable[T]、Iterator[T]
  • typing模块导入

自定义类型

  • dataclass类型注解
  • TypedDict类型定义
  • NewType类型别名
  • 类类型注解

高级类型

  • TypeVar泛型变量
  • Protocol结构化子类型
  • Callable可调用类型
  • Any和object的区别

类型检查

  • mypy安装和配置
  • 常见类型错误
  • 类型检查忽略注释
  • 配置文件pyproject.toml

学习建议

  1. 从基础类型注解开始,逐步深入高级特性
  2. 使用mypy检查代码,及时发现类型错误
  3. 合理使用Optional和Union表达不确定性
  4. 注意类型注解不影响运行时行为

📝 配套习题(19 题)

💡 参考答案在文末
判断题
1

typing模块提供List、Dict、Tuple等泛型类型,用于标注包含其他类型的复合结构,如List[int]表示元素都是整数的列表,Dict[str, int]表示键为字符串、值为整数的字典。

A

B

2

类型别名是为复杂类型注解定义的简化名称,例如 UserInfo = Dict[str, Union[int, str]] 可以用UserInfo代替复杂的类型表达,提高代码可读性。

A

B

3

mypy是Python的静态类型检查工具,可以分析代码中的类型注解,在运行前发现类型不一致的错误,无需实际执行代码即可进行类型验证。

A

B

4

typing模块是Python标准库,提供List、Dict、Tuple、Optional、Union等类型注解工具,以及Callable、Any、TypeVar等高级类型构造器。

A

B

5

Python的类型注解在运行时不会强制进行类型检查,即使标注为int类型的变量赋值为str,程序也能正常运行。

A

B

6

Optional[int]表示该值可以是int类型或None,相当于Union[int, None]。Optional常用于标注可能返回None的函数或可选参数。

A

B

7

Python类型注解使用int、str、float、bool等基本类型标注变量,例如 x: int = 10 表示x是整数类型。类型注解在运行时不强制检查,仅用于静态分析和IDE提示。

A

B

单选题
8

Dict[str, int]类型注解表示:

A

键为整数,值为字符串的字典

B

键为字符串,值为整数的字典

C

字典中可以是字符串或整数

D

只能包含一个键值对

9

函数的类型注解存储在哪个属性中?

A

func.types

B

func.annotations

C

func.hints

D

func.signature

10

Union[str, int, float]表示什么?

A

必须同时包含str、int、float三种类型

B

值可以是str、int或float中的任意一种

C

值是一个包含三种类型的元组

D

值会自动转换为三种类型

11

使用mypy检查Python代码类型的命令是:

A

python mypy script.py

B

mypy script.py

C

pip mypy script.py

D

run mypy script.py

12

Callable[[int, str], bool]表示什么类型?

A

一个返回bool的函数,参数可以是int或str

B

一个函数,接收int和str两个参数,返回bool

C

一个可以调用int和str的bool对象

D

一个包含int、str、bool的列表

13

函数类型注解的正确语法是:

A

def func(int a, str b):

B

def func(a: int, b: str) -> float:

C

def func(a int, b str) return float:

D

def func(a=int, b=str):

14

如何定义一个表示"字符串列表"的类型别名?

A

StringList: List[str]

B

StringList = List[str]

C

type StringList = List[str]

D

def StringList(): return List[str]

填空题
15

变量注解格式:变量名____________类型。函数参数注解:参数名____________类型。返回值注解用____________符号。注解存储在annotations属性中。运行时不强制检查。typing.gettype_hints()解析注解为真实类型。

16

List[____________]表示整数列表。Dict[____________, ____________]表示键为字符串值为整数的字典。Tuple[int, str]表示固定元组。Set[int]表示整数集合。Python 3.9+可直接用list[int]代替List[int]。嵌套类型如List[List[int]]表示二维列表。

17

Optional[int]等价于____________[int, ____________],表示可以是____________或None。Union[str, int]表示可以是str或int。Python 3.10+可用|符号:int | None。函数返回可能为None时应使用Optional。

18

typing提供____________________________________泛型类型。Optional[T]表示T或None。Union[A, B]表示多种类型。Any表示任意类型。Callable[[int], str]表示函数类型。TypeVar定义类型变量。Generic创建泛型类。

19

类型别名使用____________语句定义:Vector ____________ List[float]。别名简化____________类型,提高可读性。JSON = Dict[str, Union[str, int]]表示JSON数据。Python 3.12+可用TypeAlias声明。函数别名:Handler = Callable[[int], str]。类型别名便于统一修改类型定义。

参考答案
1.正确 2.正确 3.正确 4.正确 5.正确 6.正确 7.正确 8.B 9.B 10.B 11.B 12.B 13.B 14.B 15.:;:;-> 16.int;str;int 17.Union;None;int 18.List;Dict;Tuple 19.赋值;=;复杂
想在手机上练习这套专题?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一个专题 生态与工具链专题
下一个专题 → 网络编程专题
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码