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

StackOverflow https://stackoverflow.com/questions/51412

  •  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)

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top