忽略 python 中的其他关键字参数
Ignore additional keyword arguments in python
假设我有一个像
这样的函数
def foo(x):
...
当我用字典 { 'x': 42, 'y': 23 }
作为关键字参数调用它时,我得到一个 TypeError
:
>>> foo(**{ 'x': 42, 'y': 23 })
...
TypeError: foo() got an unexpected keyword argument 'y'
有没有一种好的方法可以使用关键字参数进行函数调用,而忽略其他关键字参数?
目前我的解决方案:我可以定义一个辅助函数:
import inspect
def call_with_kwargs(func, kwargs):
params = inspect.getargspec(func).args
return func(**{ k: v for k,v in kwargs.items() if k in params})
现在我可以做
>>> call_with_kwargs(foo, { 'x': 42, 'y': 23 })
42
有没有更好的方法?
如果改变你的函数没问题,那么只需向它添加一个包罗万象的 **kw
参数:
def foo(x, **kw):
# ...
并忽略函数中捕获的任何 kw
。
假设我有一个像
这样的函数def foo(x):
...
当我用字典 { 'x': 42, 'y': 23 }
作为关键字参数调用它时,我得到一个 TypeError
:
>>> foo(**{ 'x': 42, 'y': 23 })
...
TypeError: foo() got an unexpected keyword argument 'y'
有没有一种好的方法可以使用关键字参数进行函数调用,而忽略其他关键字参数?
目前我的解决方案:我可以定义一个辅助函数:
import inspect
def call_with_kwargs(func, kwargs):
params = inspect.getargspec(func).args
return func(**{ k: v for k,v in kwargs.items() if k in params})
现在我可以做
>>> call_with_kwargs(foo, { 'x': 42, 'y': 23 })
42
有没有更好的方法?
如果改变你的函数没问题,那么只需向它添加一个包罗万象的 **kw
参数:
def foo(x, **kw):
# ...
并忽略函数中捕获的任何 kw
。