返回介绍

针对关键字和默认泛化

发布于 2024-01-29 22:24:14 字数 1327 浏览 0 评论 0 收藏 0

前面的版本说明了我们需要使用的基础知识,但是它相当有局限——它只支持按照位置传递的参数的验证,并且它没有验证关键字参数(实际上,它假设不会有那种使得参数位置数不正确的关键字传递)。此外,对于在一个给定调用中可能忽略的默认参数,它什么也没有做。如果所有的参数都按照位置传递并且不是默认的,这没有问题,但在一个通用工具中,这是极少的理想状态。Python支持要灵活的多的参数传递模式,而这些我们还没有解决。

对示例的如下修改做得更好。通过把包装函数的期待参数与调用时实际传入的参数匹配,它支持对按照位置或关键字名称传入的参数的验证,并且对于调用忽略的默认参数,它会跳过测试。简而言之,要验证的参数通过关键字参数指定到装饰器,装饰器随后遍历*pargs positionals tuple和**kargs keywords字典以进行验证。

如下的测试脚本展示了如何使用装饰器——要验证的参数由关键字装饰器参数给定,并且在实际的调用中,我们可以按照名称或位置传递,或者如果它们是有效的话,可以用默认方式来忽略验证:

这段脚本运行的时候,超出范围的参数会像前面一样引发异常,但参数可以按照名称或位置传递,并且忽略的默认参数不会验证。这段代码在Python 2.6和Python 3.0下都可以运行,但额外的元组圆括号在Python 2.6中会打印出来。跟踪输出并进一步测试它以自行体验;它像前面一样工作,但是,它的范围已经拓展了很多:

对于验证错误,当方法测试行之一注释掉的时候,我们像前面一样得到一个异常(除非-0命令行参数传递给Python):

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文