python typing sequence,Python之Typing

本文详细介绍了Python中的typing模块如何进行类型检查,包括元组、字典、集合和自定义类型变量的应用,以及如何在函数签名中使用NoReturn和Any类型。通过实例演示,帮助开发者理解和实践类型注解以提高代码质量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作用

类型检查,防止运行时出现参数和返回值类型不符合。

作为开发文档附加说明,方便使用者调用时传入和返回参数类型。

该模块加入后并不会影响程序的运行,不会报正式的错误,只有提醒。

note:

typing模块只有在python3.5以上的版本中才可以使用,pycharm目前支持typing检查

Tuple、NamedTuple

Tuple、元组,是 tuple 的泛型,其后紧跟一个方括号,方括号中按照顺序声明了构成本元组的元素类型,如 Tuple[X, Y] 代表了构成元组的第一个元素是 X 类型,第二个元素是 Y 类型。

Dict、Mapping、MutableMapping

Dict、字典,是 dict 的泛型;Mapping,映射,是 collections.abc.Mapping 的泛型。根据官方文档,Dict 推荐用于注解返回类型,Mapping 推荐用于注解参数。它们的使用方法都是一样的,其后跟一个中括号,中括号内分别声明键名、键值的类型。MutableMapping 则是 Mapping 对象的子类,在很多库中也经常用 MutableMapping 来代替 Mapping。

Set、AbstractSet

Set集合,是 set 的泛型;AbstractSet、是 collections.abc.Set 的泛型。根据官方文档,Set 推荐用于注解返回类型,AbstractSet 用于注解参数。

Sequence

Sequence,是 collections.abc.Sequence 的泛型,在某些情况下,我们可能并不需要严格区分一个变量或参数到底是列表 list 类型还是元组 tuple 类型,我们可以使用一个更为泛化的类型,叫做 Sequence。

def square(elements: Sequence[float]) -> List[float]:

return [x ** 2 for x in elements]

NoReturn

NoReturn,当一个方法没有返回结果时,为了注解它的返回类型,我们可以将其注解为 NoReturn。

def hello() -> NoReturn:

print('hello')

Any

Any,是一种特殊的类型,它可以代表所有类型,静态类型检查器的所有类型都与 Any 类型兼容,所有的无参数类型注解和返回类型注解的都会默认使用 Any 类型,也就是说,下面两个方法的声明是完全等价的。

def add(a):

return a + 1

def add(a: Any) -> Any:

return a + 1

TypeVar

TypeVar,来自定义兼容特定类型的变量。

height = 1.75

Height = TypeVar('Height', int, float, None)

def get_height() -> Height:

return height

NewType

NewType,声明一些具有特殊含义的类型,帮助函数创建新的数据类型

from typing import NewType

Person = NewType('Person', Tuple[str, int, float])

person = Person(('Mike', 22, 1.75))

Callable

Callable,可调用类型,它通常用来注解一个方法.Callable 在声明的时候需要使用 Callable[[Arg1Type, Arg2Type, …], ReturnType] 这样的类型注解,将参数类型和返回值类型都要注解出来.

def date(year: int, month: int, day: int) -> str:

return f'{year}-{month}-{day}'

def get_date_fn() -> Callable[[int, int, int], str]:

return date

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值