Скажем, у меня есть следующие методы:
def methodA(arg, **kwargs):
pass
def methodB(arg, *args, **kwargs):
pass
В methodA я хочу вызвать methodB, передавая kwargs. Однако кажется, что если я определю methodA следующим образом, второй аргумент будет передан как позиционный, а не именованный аргумент переменной.
def methodA(arg, **kwargs):
methodB("argvalue", kwargs)
Как мне убедиться, что ** kwargs в methodA передается как ** kwargs в methodB?






Немного поэкспериментировав, и я понял это:
def methodA (arg, ** kwargs): methodB ("argvalue", ** kwargs)
Теперь это кажется очевидным ...
Поставьте звездочки перед переменной 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")
К сожалению, с методами это не сработает.
Что это на самом деле делает? При чем тут вопрос?
Не знаю, сколько раз мне приходилось искать эту штуку - она такая простая и все же. Спасибо, что поставили, хотя это очевидно :)