返回介绍

细节

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

如果决定使用并混合特定的参数匹配模型,Python将会遵循下面有关顺序的法则。

·在函数调用中,参数必须以此顺序出现:任何位置参数(value),后面跟着任何关键字参数(name=value)和*sequence形式的组合,后面跟着**dict形式。

·在函数头部,参数必须以此顺序出现:任何一般参数(name),紧跟着任何默认参数(name=value),如果有的话,后面是*name(或者在Python 3.0中是*)的形式,后面跟着任何name或name=value keyword-only参数(在Python 3.0中),后面跟着**name形式。

在调用和函数头部中,如果出现**arg形式的话,都必须出现在最后。如果你使用任何其他的顺序混合了参数,你将会得到一个语法错误,因为其他顺序的混合会产生歧义。Python内部是使用以下的步骤来在赋值前进行参数匹配的:

1.通过位置分配非关键字参数。

2.通过匹配变量名分配关键字参数。

3.其他额外的非关键字参数分配到*name元组中。

4.其他额外的关键字参数分配到**name字典中。

5.用默认值分配给在头部未得到分配的参数。

在这之后,Python检测来确保每个参数只传入了一个值。如果不是这样的话,将会发生错误。当所有的匹配都完成了,Python把传递给参数名的对象赋值给它们。

Python使用的真正的匹配算法更复杂一些(例如,它必须考虑Python 3.0中的keyword-only参数),因此,要了解更为详细的介绍,请参考Python的标准语言手册。这不是必须阅读的材料,但是它所介绍的Python匹配算法能够帮助你理解一些令人费解的情况,特别是当模式混合的时候。

注意:在Python 3.0中,函数头部中的参数名称也可以有一个注解值,特定形式如name:value(或者要给出默认值的话是name:value=default形式)。这只是参数的一个额外语法,不会增加或修改这里所介绍的参数顺序规则。函数自身也可以有一个注解值,以def f()->value的形式给出。参见第19章对于函数注解的介绍,以了解更详细的内容。

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

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

发布评论

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