我按照这个来传递函数作为参数:
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)
请帮助/
答案 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)