Передача Python в присваивании переменных через обертку функции - PullRequest
2 голосов
/ 24 июня 2010

Итак, я знаю, что вы можете обернуть функцию вокруг другой функции, выполнив следующие действия.

def foo(a=4,b=3):
   return a+b
def bar(func,args):
   return func(*args)

так что если я тогда позвонил

bar(foo,[2,3])

Возвращаемое значение будет 5.

Мне интересно, есть ли способ использовать bar для вызова foo с помощью foo (b = 12), где bar возвращает 16?

Имеет ли это смысл? Большое спасибо за ваше время раньше времени! И извините за то, что задали так много вопросов.

Ответы [ 2 ]

11 голосов
/ 24 июня 2010

Для этого требуется синтаксис **kwargs (аргументы ключевого слова) .

def foo(a=4, b=3):
    return a+b
def bar(func, *args, **kwargs):
    return func(*args, **kwargs)

print bar(foo, b=12) # prints 16

Где *args - любое количество позиционных аргументов, **kwargs - все именованные аргументыбыли переданы.

И, конечно, они только *args и **kwargs по соглашению;Вы можете назвать их *panda и **grilled_cheese для всех забот Python.

4 голосов
/ 24 июня 2010

Да, вы также можете передать диктовку в дополнение (или вместо) к списку:

def bar(func, args=[], kwargs={}):
    return func(*args, **kwargs)

bar(foo, {'b':12})
...