持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第4天,点击查看活动详情
介绍
typing 是Python3.5 版本中新增的专用于类型注解的内置模块,我们知道Python是一门动态解释型语言,我们在定义变量时其类型并不是固定的,因此typing 模块的主要作用就是为Python程序提供静态类型检查,通常在定义函数或者方法时使用该模块对参数进行类型注解,在调用函数或者方法时会为我们提供非常多的便利,比如调用函数时传递的参数或者并不是该函数需要的类型时,就会出现相应的提示,下面我们就一起来看看该模块如何使用吧。
使用
一些基础类型无需使用typing模块导入也可以使用,比如常用的list str int tuple None bool dict, 当然也可以通过typing进行导入
常用的类型注解类型
Any 类型
Any 类型是一种特殊的类型,静态类型检查器认为所有类型都和Any 兼容。但是也有对应的问题,在使用Any 时不会执行类型检查,另外如果未指定返回值和参数类型的函数都默认的隐式的使用Any
# 变量定义 变量名:类型 = 变量值
a: Any = None # 表示变量a可以是Python支持的任何数据类型
def foo(a: Any, b: Any) -> Any:
"""
:param a: Python支持的任何数据类型
:param b: Python支持的任何数据类型
:return: Python支持的任何数据类型
"""
return a, b
Union
Union[X, Y] 表示类型是X 或者 Y 中的一种,如下代码示例。
from typing import Union
def foo(a: int, b: int) -> Union[int, str]:
"""
:param a: int类型
:param b: int类型
:return: int 或者 str类型
"""
if a + b > 0:
return a+b
return str(a+b)
Optional
Optional[x] 可选类型表示类型是X 或者None,可以等价于Union[X, None] 。
from typing import Optional
def foo(a: int, b: int) -> Optional[int]:
"""
:param a: int类型
:param b: int类型
:return: int 或者 None
"""
if a + b > 0:
return a+b
自定义类型
我们可以通过自定义类来进行类型注解。
class Test:
def __init__(self, name):
self.name = "test"
def foo(name: str) -> Test:
"""
:param name: str类型
:return: Test类的对象
"""
return Test(name)
类型别名
我们可以将类型赋值给别名,就可以定义类型别名了,在使用时直接使用类型别名即可。
from typing import Dict
Vec = Dict[str: int]
def foo(name: str, age: int) -> Vec:
"""
:param age: int类型
:param name: str类型
:return: Vec 类型别名Dict[str: int], 字典key是str类型, value是int类型
"""
return {f"{name}": age}
总结
在使用typing 模块时,并不是强制执行类型注解,但是这些注解可以用于类型检查、IDE等第三方工具。在实际开发中灵活规范的运用typing 模块会让我们的开发更加高效,并且可以让代码变得更易读。
上述文章中介绍了几种常用的类型注解,typing 模块其实还有很多其他的类型注解和用法,有兴趣了解更多的XDM 可以去官网查看。