gpt4 book ai didi

python位置参数和关键字参数

转载 作者:太空狗 更新时间:2023-10-29 20:11:35 26 4
gpt4 key购买 nike

我在看mercurial的源码,在commands.py中发现了这样一个func def:

def import_(ui, repo, patch1=None, *patches, **opts):
...

在 python 中,位置参数必须放在关键字参数之前。但在这里,patch1 是一个关键字参数,后跟一个位置参数 *patches。为什么这样可以?

最佳答案

看看PEP 3102它似乎也与 this 有关.

总而言之,patches 和 opts 接受可变参数,但后者接受关键字参数。关键字参数作为字典传递,其中 variable positional arguments would be wrapped as tuples .

从你的例子

def import_(ui, repo, patch1=None, *patches, **opts):

u1、repo 和 patch1 之后的任何位置参数都将作为元组包装在补丁中。变量位置参数之后的任何关键字参数都将通过 opts 包装为 Dictionary 对象。

另一个重要的事情是,调用者有责任确保不违反条件 non-keyword arg after keyword arg

所以违反这一点的东西会引发语法错误..

例如

喜欢的电话

 import_(1,2,3,test="test")
import_(1,2,3,4,test="test")
import_(1,2,3,4,5)
import_(1,2,patch1=3,test="test")

有效,但是

import_(1,2,3,patch1=4,5)

会引发语法错误SyntaxError: non-keyword arg after keyword arg

在第一个有效的情况下 import_(1,2,3,test="test")

u1 = 1, repo = 2, patch1 = 3, patches = () and opts={"test":"test"}

在第二种有效情况下 import_(1,2,3,patch1=4,test="test")

u1 = 1, repo = 2, patch1 = 3 , patches = (4) and opts={"test":"test"}

在第三种有效情况下 import_(1,2,3,4,5)

u1 = 1, repo = 2, patch1 = 3 , patches=(4,5), and opts={}

在第四种有效情况下 import_(1,2,patch1=3,test="test")

u1 = 1, repo = 2, patch1 = 3 , patches=(), and opts={"test":"test"}
you can use patch1 as a keywords argument but doing so you cannot wrap any variable positional arguments within patches

关于python位置参数和关键字参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8486067/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com