typing库的使用
1.基本介绍
- 类型检查,防止运行时出现参数和返回值类型不符合。
- 作为开发文档附加说明,方便使用者调用时传入和返回参数类型。
- 该模块加入后并不会影响程序的运行,不会报正式的错误,只有提醒。
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))
|
- 说明:
- 在传入参数时通过“参数名:类型”的形式声明参数的类型;
- 返回结果通过”-> 结果类型”的形式声明结果的类型。
- 在调用的时候如果参数的类型不正确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
|
- 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
DatasetType = Type[Union[ DatasetMultiEncDec, DatasetEPT, DatasetHMS, DatasetGPT2, PretrainDataset, SingleEquationDataset, MultiEquationDataset, AbstractDataset ]]
|
这个类型提示使用了 Union
类型,表示被注解的对象可以是其中列举的多个类型中的任意一个。同时,使用 Type
类型表示这是一个类对象的类型提示。因此,DatasetType
表示一个类,该类是上述列举的多个类之一。