私は*args
と**kwargs
でいくつかのコードをテストしています、そして、**kwargs
の場合はdictionary
を書きました。何らかの理由で、私は到着しています
def func(*args, **kwargs):
if args:
second_test(*args)
Elif kwargs:
second_test(**kwargs)
def second_test(stringa, integera, floata):
print("Name: %s, Problems Correct: %d, Points: %f" % (stringa, integera, floata))
profile_1 = ["David", 21, 132.00]
func(*profile_1)
profile_1a = {'Name': 'David', 'Problems Correct': 21, 'Points': 132.00}
func(**profile_1a)
コードはline 44
から始まり、line 57
で終わります。これが私が取得しているエラーです:
TypeError: second_test() got an unexpected keyword argument 'Name'
予期しないキーワード引数 "をグローグしましたが、定義を見つけることはできません。他のスタックオーバーフロー記事のみ。コードの何が悪いのですか?
kwargs
を関数に渡すときは、リスト内の正確な変数名を見つけることを期待します。代わりに辞書キーがstringa
、integera
、およびfloata
関数が問題なく機能します。
そのため、関数変数名を変更する必要があります辞書のキー名を変更して作業に変更してください
キーワード引数は、「不明/予期しない」名前付き名前で渡されている引数です。
たとえば、1つの引数で関数を定義しましょう
def func(a):
print(a)
_
さて、この関数を「予期しない」という名前の引数で呼び出すと、
func(b=3) # remember we didn't define b as an argument
_
それからTypeErrorを取得します。しかし、これらの「予期しない」という名前の引数を除くという機能を変更した場合は、前のコードを実行できます。
def func(a, **kwargs):
print(a)
print(kwargs["b"]) # now, if we pass an argument 'b' to the function, this will print its value (if we don't, we get a KeyError)
> func(3, b=15)
3
15
_