typing库的使用!☃️

typing库的使用

1.基本介绍

  • typing模块的作用:
  1. 类型检查,防止运行时出现参数和返回值类型不符合。
  2. 作为开发文档附加说明,方便使用者调用时传入和返回参数类型。
  3. 该模块加入后并不会影响程序的运行,不会报正式的错误,只有提醒。
  • 下面说说typing模块常用的方式:
1
2
3
4
5
6
7
8
9
from typing import List, Tuple, Dict
def add(a:int, string:str, f:float, b:bool) -> Tuple[List, Tuple, Dict, bool]:
list1 = list(range(a))
tup = (string, string, string)
d = {"a":f}
bl = b
return list1, tup, d,bl
print(add(5,"hhhh", 2.3, False))
# 结果:([0, 1, 2, 3, 4], ('hhhh', 'hhhh', 'hhhh'), {'a': 2.3}, False)
  • 说明:
  • 在传入参数时通过“参数名:类型”的形式声明参数的类型;
  • 返回结果通过”-> 结果类型”的形式声明结果的类型。
  • 在调用的时候如果参数的类型不正确pycharm会有提醒,但不会影响程序的运行。
  • 对于如list列表等,还可以规定得更加具体一些,如:“-> List[str]”,规定返回的是列表,并且元素是字符串。
  • 由于python天生支持多态,迭代器中的元素可能多种,如下:
1
2
3
4
5
6
7
8
from typing import List
def func(a:int, string:str) -> List[int or str]:
list1 = []
list1.append(a)
list1.append(string)
return list1

# 使用or关键字表示多种类型
  • typing常用的类型:
  • int,long,float: 整型,长整形,浮点型;
  • bool,str: 布尔型,字符串类型;
  • List, Tuple, Dict, Set:列表,元组,字典, 集合;
  • Iterable,Iterator:可迭代类型,迭代器类型;
  • Generator:生成器类型;

2.具体案例

2.1 typing的使用范围

1
2
3
4
5
6
7
class DataLoader:
"""docstring for FileToProblemText."""

def __init__(self, user_config: UserConfig):
self.file_path = user_config.get_dataset_path()
self.file_type = user_config.get_dataset_type()
self.chunk_size = user_config.get_dataset_size()

这段代码中的user_config: UserConfig不需要导入typing库,在Python 3.5及更高版本中,类型提示已经成为一种标准的语言特性。同时,对于返回值的类型提示—>也不需要导入。

只有在泛型提示,即准确知道列表或字典中的数据类型时,才需要用到Typing库。

1
2
3
4
5
6
7
8
9
from typing import List, Dict, Any
class SolvingEngine:
def __init__(self):
self.logger = logging.getLogger(self.__class__.__module__)
self.graph: GraphOfStates = GOS_generator()
self.shared_state_data: SharedStateData = SharedStateData()
self.run_states: List[State] = []
self.result: Dict[str, Any] = {}
self.executed: bool = False

对于具体的类型,使用List或者Dict来表示。

2.2 Union的使用

1
2
3
4
5
6
7
8
9
10
from typing import Type, Union

# 这个类型提示表示一个类型,该类型可以是以下类之一的实例:
# DatasetMultiEncDec, DatasetEPT, DatasetHMS, DatasetGPT2,
# PretrainDataset, SingleEquationDataset, MultiEquationDataset, AbstractDataset
DatasetType = Type[Union[
DatasetMultiEncDec, DatasetEPT, DatasetHMS, DatasetGPT2,
PretrainDataset, SingleEquationDataset, MultiEquationDataset, AbstractDataset
]]

这个类型提示使用了 Union 类型,表示被注解的对象可以是其中列举的多个类型中的任意一个。同时,使用 Type 类型表示这是一个类对象的类型提示。因此,DatasetType 表示一个类,该类是上述列举的多个类之一。


typing库的使用!☃️
https://yangchuanzhi20.github.io/2023/12/06/算法/python/python库的使用/python中typing库的使用/
作者
白色很哇塞
发布于
2023年12月6日
许可协议