Назначайте * args при использовании ** kwargs - PullRequest
0 голосов
/ 08 мая 2018

У меня есть функция Python, которая выглядит следующим образом:

def test(a, b, *args):
    print(a, b, args)

И у меня есть словарь (kwargs), в котором есть только элементы a и b. Я бы хотел назвать тест таким:

test(**kwargs)

и присвойте больше значений args . Как мне это сделать, и если я не могу, как правильно это сделать?

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Вы определили, что ваша функция всегда принимает позиционные или ключевые аргументы: a и b и список позиционных аргументов после этого.

В Python это синтаксическая ошибка для предоставления позиционного аргумента после ключевого аргумента.

Следовательно, вы не можете использовать **kwargs распаковку словаря при вызове метода, если вы также хотите предоставить дополнительные позиционные аргументы.

Однако вы можете либо использовать только позиционные аргументы - убедитесь, что a и b являются первыми двумя элементами в вашем списке.

Или, если вы действительно не хотите использовать словарь, вам придется напрямую получить значения a и b, передать его позиционно как a и b, а затем получить оставшиеся items() из вашего словаря и вызовите вашу функцию с ним. Это потеряет ключевые значения.

0 голосов
/ 08 мая 2018

Вы можете попробовать использовать просто *args в качестве аргумента.

Пример:

def test(*args):
    print(args)

test({"a": 1, "b":2, "c":3, "d":[1,2,3,45]})

Выход:

({'a': 1, 'c': 3, 'b': 2, 'd': [1, 2, 3, 45]},)
...