所以我有一个定义如下的函数:
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.getDistnace
将strings
和parentD
添加到getDistance
,第二个Node.getDistnace
将nodeName
和nodeDistance
添加到该函数。
答案 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
方法的最后一个参数匹配。