Передача аргументов именованных переменных в Python
-
09-06-2019 - |
Вопрос
Скажем, у меня есть следующие методы:
def methodA(arg, **kwargs):
pass
def methodB(arg, *args, **kwargs):
pass
В методе A я хочу вызвать метод B, передав kwargs.Однако кажется, что если я определяю methodA
следующим образом, второй аргумент будет передан как позиционный, а не как именованный аргумент переменной.
def methodA(arg, **kwargs):
methodB("argvalue", kwargs)
Как убедиться, что **kwargs в методе A передаются как **kwargs в метод B?
Решение
Поставьте звездочки перед переменной kwargs.Это заставляет Python передавать переменную (которая считается словарем) в качестве аргумента ключевого слова.
methodB("argvalue", **kwargs)
Другие советы
Как в сторону:При использовании функций вместо методов вы также можете использовать functools.partial:
import functools
def foo(arg, **kwargs):
...
bar = functools.partial(foo, "argvalue")
В последней строке будет определена функция «bar», которая при вызове будет вызывать foo с первым аргументом, установленным в «argvalue», и все остальные функции, которые только что были переданы:
bar(5, myarg="value")
позвоню
foo("argvalue", 5, myarg="value")
К сожалению, это не будет работать с методами.
Немного экспериментов и я понял вот что:
def методA(arg, **kwargs):методB("argvalue", **kwargs)
Теперь это кажется очевидным...