python的函数契约
python-contracts的Python项目详细描述
python函数的契约
契约可用于验证函数的输入或输出。组件之间的数据流很难跟踪或维护,有时会迫使我们在任何地方编写打印语句,试图捕获格式错误的数据。这个契约库通过截取传入或传出函数的数据并检查它们是否满足指定的需求来解决这个问题。
入门
通过pip安装合同。
$ pip3 install python-contracts
一旦安装了契约,就可以导入输入和输出契约装饰器以及其他方便的限定符函数。
# Imports ic (input contract) and oc (output contract) fromcontractsimportic,oc# Examples of some qualifiersfromcontractsimportnatural,integer
有关可用限定符的列表,请参阅限定符。
合同
input contract是一个函数装饰器,它接受kwargs作为参数名到它们的限定符的映射。
输出协定是另一个decorator,它接受一个限定符并检查调用修饰函数的结果。
使用输入协定
fromcontractsimportic,natural@ic(val=natural)deffunc(val):returnval
func接受“val”作为参数。ic的参数应该与函数的参数名相对应。在这种情况下,合同规定“val”的参数应该是自然数。
ic可以接受与修饰函数的参数数目一样多的参数。所有键都应映射到正确的参数名。如果违反了约定,您将收到一条inputContractException错误消息,其中列出了失败的参数及其给定值。
contracts.exceptions.InputContractException:
Arguments that failed the contracts
val: -1
使用输出协定
fromcontractsimportoc,natural@oc(natural)deffunc(val):returnval
oc验证调用函数的结果。在这种情况下,它检查结果是否为自然数。decorator只接受一个限定符。如果违反合同,将给出以下错误。
contracts.exceptions.OutputContractException: The result of -1 broke the output contract
限定符
限定符是接受单个值并在满足条件时返回True
,否则返回False
的函数。
为了方便起见,contracts库在一些数据类型上提供了一系列基本限定符。
- 数字:数字、正数、负数
- 整数:整数、自然数、正整数、负整数
- 浮点:浮点、正浮点、负浮点
组成多个限定符
要组合多个限定符,可以导入compose函数,并根据需要传递尽可能多的限定符以生成单个限定符。
fromcontractsimportnatural,positive_integer,compose@ic(val=compose(natural,positive_integer))deffunc(val):returnval
上面的输入协定将检查“val”的参数是否为自然数和正整数。
自定义限定符
库的用户可以插入自己的限定符,只要他们坚持正确的数据签名。如果在整个代码库中使用此库,则在单独的文件中编写限定符集合将保持干净。
用
构建合同库是用Python3.6构建的。代码仅在此版本中测试过。与其他版本的兼容性尚未测试。
使用的库:
作者
吉诺·雅各布-Github
非常欢迎反馈。请写下问题。
许可证
这个项目是在麻省理工学院的许可下授权的-详细信息请参见LICENSE.md文件