系统学习Python——装饰器:验证函数的参数案例-[实现细节:参数假设]

分类目录:《系统学习Python》总目录


考虑被装饰函数的期待参数名的集合,该解决方案依赖于Python对于参数传递顺序所施加的两条限制(在Python2.X和Python3.X的当前发行版本中都仍然成立):

  • 在调用时,所有的位置参数出现在所有关键字参数之前。
  • def中,所有的非默认参数出现在所有的默认参数之前。

也就是说,在一个调用中,一个非关键字参数通常不会跟在一个关键字参数后面,并且在定义中,一个非默认参数不会跟在一个默认参数后面。在调用和def这两种位置中,所有的name=value语法必须出现在任何简单的name之后。正如我们也了解过的,Python按从左至右的顺序把按位置传递的参数值与函数头中的参数名相匹配,这样这些值就总能够匹配头部中最左边的那些名称。而关键字通过名称匹配,并且一个给定的参数只能够接收一个值。

为了简化任务,我们也可以假设一个调用一般是有效的一一一也就是说,所有的参数要么接收值(按照名称或位置),要么将有意省略而选取默认值。这种假设不一定成立,因为当包装器的逻辑测试有效性的时候,数还没有被真正调用一一而由于不正确的参数传递,随后包装器层调用函数的时候仍然可能失效。只要这不会引发包装器过分糟糕地失效,我们就可以巧妙处理调用的有效性。这是有帮助的,因为在调用发生之前验证它,将会要求我们完全仿真Python的参数匹配算法一一一再一次说明,这对我们的工具来说是一个过于复杂的过程。

参考文献:
[1] Mark Lutz. Python学习手册[M]. 机械工业出版社, 2018.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

von Neumann

您的赞赏是我创作最大的动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值