2008-09-09 3 views
11

Скажет, у меня есть следующие методы:Передача имени переменных аргументов в 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?

ответ

33

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

methodB("argvalue", **kwargs) 
+0

Я не знаю, сколько раз мне приходилось искать эту вещь - это так просто и все же. Спасибо, что поместили его, хотя это очевидно :) – cybertoast 2011-06-15 22:22:44

1

Некоторые эксперименты, и я понял, это один из:

Защиту Methoda (ARG, ** kwargs): methodB ("argvalue" ** kwargs)

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

2

Как и в сторону: При использовании функции вместо методов, вы можете также использовать functools.partial:

import functools 

def foo(arg, **kwargs): 
    ... 

bar = functools.partial(foo, "argvalue") 

Последняя строка определяет функцию «бар», что при вызове будет вызывать Foo с первым аргументом, равным «argvalue» и все другие функции, только что прошел на:

bar(5, myarg="value") 

позвонит

foo("argvalue", 5, myarg="value") 

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

+0

Что это на самом деле? Что это касается вопроса? – rjmunro 2008-09-15 15:58:41

Смежные вопросы