1

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

将带参数的函数传递给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)

请帮忙/

4

3 回答 3

3

*args它的兄弟**kwargs是通常用于额外参数和关键字参数的名称。通过namedArg=arg2.

所以,试试这个:

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}
于 2013-07-22T04:11:47.347 回答
0

阅读这个,python doc 中的关键字参数

正如错误明确指出的那样got an unexpected keyword argument 'namedArg'。因为您只在 *args 中提供参数。

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

于 2013-07-22T04:17:06.953 回答
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)
于 2013-07-22T04:23:02.020 回答