import inspect
from functools import wraps
def inject_kwargs(f):
@wraps(f)
def wrapped(*args, **kwargs):
argspec = inspect.getfullargspec(f)
if not argspec.varkw: # function does not accept arbitrary keywords arguments
return f(*args, **{k: kwargs[k] for k in kwargs if k in argspec.args})
else:
return f(*args, **kwargs)
return wrapped
@inject_kwargs
def test(foo=None, bar=None):
print(foo, bar)
x = {'bar': 1, 'baz': 2}
test(**x) # now prints (None, 1) without raising any error
我使用装饰器中的inspect模块解决了这个问题,因为似乎没有其他方法可以解决这个问题。我使用的是python3.6.2。你知道吗
相关问题 更多 >
编程相关推荐