您可以使用以下**kwargs语法:
def foo(**kwargs):
txt = {}
for k, v in kwargs.items():
if v:
txt[k] = v
return txt
或者,如果您的墨水不足:
def foo(**kwargs):
return dict(((k,v) for k, v in kwargs.items() if v))
正如克莱门特·贝洛特所建议的:
如果您想确保这些参数在您的预期集合中,您可以有一个ALLOWED_PARAMS = ('bar','baz','qux','haz')常量并替换if v为if v and k in ALLOWED_PARAMS.
正如帝斯曼建议的那样:
如果您正在运行 Python 2.7+,则可以使用dict comprehension。
此版本还提供了“允许的变量”问题的替代方案:
def foo(bar=None, baz=None, qux=None, haz=None):
return {k:v for k,v in locals().items() if v}
假设您实际上想根据存在的那些参数调用函数,您可以这样做:
KWARGS_TO_FUNCTIONS = {
'bar':fn_bar,
'baz':fn_baz,
'qux':fn_qux,
'haz':fn_haz,
}
def foo(**kwargs):
for k, v in kwargs.items():
if v:
try:
KWARGS_TO_FUNCTIONS[k](v)
except KeyError:
pass # We didn't want that kwarg.
现在,总而言之,我不完全确定这真的是“元”。