我发现编写一个包装另一个函数的函数会导致“冗余”关键字参数。例如看以下几行:
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()
是具有关键字参数的库函数。可能超过两个。
是否可以使用变量名称作为关键字来传递关键字参数?
答案 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))