Передача именованных переменных аргументов в Python

Скажем, у меня есть следующие методы:

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?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
12
0
10 477
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Немного поэкспериментировав, и я понял это:

def methodA (arg, ** kwargs): methodB ("argvalue", ** kwargs)

Теперь это кажется очевидным ...

Ответ принят как подходящий

Поставьте звездочки перед переменной kwargs. Это заставляет Python передавать переменную (которая, как предполагается, является словарем) в качестве аргументов ключевого слова.

methodB("argvalue", **kwargs)

Не знаю, сколько раз мне приходилось искать эту штуку - она ​​такая простая и все же. Спасибо, что поставили, хотя это очевидно :)

cybertoast 16.06.2011 02:22

В стороне: при использовании функций вместо методов вы также можете использовать 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")

К сожалению, с методами это не сработает.

Что это на самом деле делает? При чем тут вопрос?

rjmunro 15.09.2008 19:58

Другие вопросы по теме