* argsを使用してメソッドを呼び出す方法がいくつか異なります。以下は私のコードです。TypeErrorを理解する:キーワード引数に複数の値がある
def total(name, *args):
if args:
print("%s has total money of Rs %d/- " %(name, sum(args)))
else:
print("%s's piggy bank has no money" %name)
ここでは、このメソッドを呼び出す方法が2つあります。 1つは*()の中に余分な引数を渡すか、カンマで直接区切ります。私はparam = valueの形で 'name'の値を意図的に渡しているので、エラーが出ます。
1 - - を分離余分のparamsコンマを渡す: -
>>> total(name="Adi", 1, 2, 10)
File "<stdin>", line 1
SyntaxError: non-keyword arg after keyword arg
2 - 使い方*()余分のparamsを渡す: -
>>> total(name="Adi", *(1, 2, 10))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: total() got multiple values for keyword argument 'name'
私がしようとしていた二つの方法を以下に示します最初のエラーメッセージはかなり明確で、正確なエラーを伝えます。しかし、私は2番目の呼び出しのエラーメッセージを理解することができません。
どのようにPythonは、パラメータ「名前」に複数の値を取得していますという2番目のコールを評価していますか?次のように私の心に来た可能性のある方法は、内部的にPythonは
total(name="Adi", *(1, 2, 10))
を変換されますされています - これ以上の翻訳で
total(*(1, 2, 10), name="Adi")
、位置ごとに、「名前は」の値を取得します*(1 、2,10)、後で再び「Adi」となる。したがって、複数の値の誤差が理解されます。
しかし、私はPythonが内部的に位置を変更するかどうか、わかりませんか?これについての洞察は役に立ちます。
'合計(品名 - "アディ"、1、2、10)'ための有効でありません' - '記号を使用します。本当のコードを表示していますか? –
私の悪い。ミスだった。 –