冗余关键字参数

时间:2018-12-13 08:31:29

标签: python methods

我发现编写一个包装另一个函数的函数会导致“冗余”关键字参数。例如看以下几行:

def check_then_execute(foo=1, bar="A"):
    foo = safe(foo) # will return foo in a safe form
    bar = safe(bar) 
    execute(foo=foo, bar=bar) # doesn't it feel redundant?

在此示例中,execute()是具有关键字参数的库函数。可能超过两个。

是否可以使用变量名称作为关键字来传递关键字参数?

1 个答案:

答案 0 :(得分:1)

一般方法是:

execute(**some_dict)

现在,如何获得一个可用的some_dict,而不是简单地重复这些参数而变得冗长,这取决于您的情况。就您而言,如果您接受check_then_execute positional 自变量:

def check_then_execute(*args):
    safe_args = dict(zip(('foo', 'bar'), map(safe, args)))
    execute(**safe_args)

这是……也许……不太冗长……?你是法官。

如果您接受关键字参数,则实际上要短一些:

def check_then_execute(**kwargs):
    execute(**{k: safe(v) for k, v in kwargs.items()})

如果您想接受位置参数和关键字参数的任何组合……您最好做自己正在做的事情,可能会略为精简:

def check_then_execute(foo=1, bar='A'):
    execute(foo=safe(foo), bar=safe(bar))