如何在方法调用中使用关键字arg之后的非关键字arg?

时间:2012-07-12 18:02:27

标签: python function arguments keyword

所以我有一个定义如下的函数:

def getDistnace(self, strings, parentD, nodeName, nodeDistance):

我称之为:

Node.getDistnace(newNode, strings, parentD, nodeName=None, nodeDistance=None)

Node.getDistnace(node, strings=None, parentD=None, nodeName, nodeDistance)

这两个来自其他两个不同的功能。但我的问题是我收到一条错误消息,指出有non-keyword arg after keyword arg

有没有解决此错误的方法?第一个Node.getDistnacestringsparentD添加到getDistance,第二个Node.getDistnacenodeNamenodeDistance添加到该函数。

1 个答案:

答案 0 :(得分:7)

您的所有参数都是位置参数,您根本不需要使用关键字:

Node.getDistnace(newNode, strings, parentD, None, None)

Node.getDistnace(node, None, None, nodeName, nodeDistance)

我认为你混淆了局部变量(传递给函数的内容)和函数的参数名称。它们碰巧在您的代码中匹配,但并不要求它们匹配。

以下代码与第一个示例具有相同的效果:

arg1, arg2, arg3 = newNode, strings, parentD
Node.getDistnace(arg1, arg2, arg3, None, None)

如果你想要使用关键字参数,那很好,但是它们不能跟随位置参数。然后你可以改变排序,python仍然可以匹配它们:

Node.getDistnace(node, nodeDistance=nodeDistance, strings=None, parentD=None, nodeName=nodeName)

这里我将nodeDistance移到了关键字参数的前面,但Python仍然会将它与getDistnace方法的最后一个参数匹配。