介绍
Pydantic 可以帮助我们显示的定义数据集中每个字段的数据类型,并在数据导入时,对数据进行强制验证,以确保输出的数据满足预期,并在数据无效时提供用户友好的错误信息。
pydantic主要是一个解析库,而不是验证库。验证是达到目的的一种手段:构建符合所提供的类型和约束的模型。换句话说,pydantic保证输出模型的类型和约束,而不是输入数据。
官方文档
其实python对于变量本身是提供了类型限制的方案的,但由于约束不是强制的,所以可能我们会出现偷懒的情况~,也许大部分情况下可能只是影响我们二次阅读代码或者函数调用的成本(回溯代码核查输入输出格式),但是在一些特殊的情境下,可能会导致我们的结果出现一些意料之外的错误,示例如下:1
2
3
4
5
6
7
8
9
10
11
12# def sum(a,b):
def sum_1(a: int, b: int):
print(str(a) +"+" + str(b) + " = " + str(a+b))
return a + b
def sum_2(a, b):
print(str(a) +"+" + str(b)+" = "+ str(a+b))
return a + b
a=1;b=2; sum_1(a,b) # 1+2 = 3
a=1;b=2; sum_2(a,b) # 1+2 = 3
a=str(1);b=str(2); sum_2(a,b) # 1+2 = 12
我们相对两个数字求和,但是在定义函数的时候,忘记了对输入参数的类型进行限制,而某个调用的时候,可能会由于一些特殊的需求,我们把数字都格式成了字符串,这个时候我们如果函数使用sum_2的方式,那么就会出现一些无法预测的问题。
当然上述示例,主要是对输入输出类型进行了限制,但是有时候,我们除了限制输入输出,还需要对数据的具体结构进行限制,比如某些函数我们处理转录本为 “NM“的数据,而不应该出现 “NR“格式的数据等。所以除了数据类型,有时候,我们还需要惊醒一些更复杂的数据格式校验,这个时候,我们就可以使用pydantic来帮我们进行。
安装
1 | pip install pydantic |
Pydantic 可以可选的使用 Cython 进行编译,将会带来 30%-50%的性能提升。
PyPI可以为Linux、MacOS和64位Windows提供二进制文件。如果您是手动安装,请在安装pydantic之前安装 cython,这样编译就会自动进行。
要测试pydantic 是否已经编译,可以使用如下方法:1
2import pydantic
print(pydantic.compiled)