Я тестирую некоторый код с *args
и **kwargs
, и я написал dictionary
для **kwargs
. По какой-то причине я получаю
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'
Я погуглил «неожиданный аргумент ключевого слова», но не могу найти определение; только другие статьи, посвященные stackoverflow. Что не так с моим кодом?
2 ответа
При передаче kwargs
в функцию она ожидает найти точное имя переменной в списке. Если вместо этого ваши ключи словаря были stringa
, integera
и floata
, функция работала бы без проблем.
Таким образом, вам нужно либо изменить имена переменных функций , либо изменить имена ключей в своем словаре, чтобы это работало
Аргумент ключевого слова - это весь неизвестный / неожиданный аргумент named , передаваемый по имени.
Например, давайте определим функцию с одним аргументом
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
Похожие вопросы
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.