将函数作为参数传递给命名参数

时间:2013-07-22 04:09:05

标签: python

我按照这个来传递函数作为参数:

Passing functions with arguments to another function in Python?

但是,我无法弄清楚如何使用自己的参数传递函数作为名称参数

def retry(func, *args):
  func(*args)

def action(args):
  do something

retry(action, arg1, namedArg=arg2)

我在这里得到一个例外:

TypeError: retry() got an unexpected keyword argument 'namedArg'

通常情况下,我可以这样做:

action(arg1, namedArg=arg2)

请帮助/

3 个答案:

答案 0 :(得分:3)

*args并且它的兄弟**kwargs是通常用于额外参数和关键字参数的名称。当您通过namedArg=arg2时,您正在传递一个kew字参数。

所以,试试这个:

def retry(func, *args, **kwargs):
  func(*args, **kwargs)

def action(*args, **kwargs):
  do something

retry(action, arg1, namedArg=arg2)

如果您改为使用

def action(args, kwargs):
  do something

然后你最终得到args作为参数列表,kwargs作为关键词参数的字典,所以在你的情况下

args = [arg1]
kwargs = {'namedArg':arg2}

答案 1 :(得分:0)

请阅读keyword arguments in python doc

由于错误明确指出got an unexpected keyword argument 'namedArg'。你在* args中只提供参数的地方。

你会发现很多例子来理解关键字参数。

答案 2 :(得分:0)

你需要的是functools。

http://docs.python.org/2/library/functools.html#functools.partial

from functools import partial

def action(arg):
    do something

def action2(arg=1):
    do something

def action3(arg1, arg2=2):
    do something

partial(action, arg1)

partial(action, arg1, arg2=3)