2

だから私はそのように定義された関数を持っています:

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)

どちらも他の2つの異なる機能からのものです。しかし、私の問題は、 があるというエラーが表示されることですnon-keyword arg after keyword arg

このエラーを回避する方法はありますか? 1 つ目はandをにNode.getDistnace追加し、2 つ目はandを関数に追加します。stringsparentDgetDistanceNode.getDistnacenodeNamenodeDistance

4

1 に答える 1

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メソッドの最後の引数と一致させます。

于 2012-07-12T18:04:00.273 に答える