filtering keyword arguments
bukzor
workitharder at gmail.com
Sun Jul 13 02:04:23 EDT 2008
On Jul 12, 8:44 pm, Amir <amirn... at gmail.com> wrote:
> How do you filter keyword arguments before passing them to a function?
>
> For example:
>
> def f(x=1): return x
>
> def g(a, **kwargs): print a, f(**kwargs)
>
> In [5]: g(1, x=3)
> 1 3
>
> In [6]: g(1, x=3, y=4)
> TypeError: f() got an unexpected keyword argument 'y'
>
> Is there a way to do something like:
>
> def g(a, **kwargs): print a, f(filter_rules(f, **kwargs))
>
> so only {'x': 3} is passed to f?
>
> I was hoping for a pythonic way of doing what in Mathematica is done
> by FilterRules:
>
> http://reference.wolfram.com/mathematica/ref/FilterRules.html
Here it is as a decorator:
def filter_arguments(func):
def func2(*args, **kwargs):
import inspect
arglist, vararg, kwarg, defaults = inspect.getargspec(func)
for k in kwargs.copy():
if k not in arglist: del kwargs[k]
return func(*args, **kwargs)
return func2
@filter_arguments
def func(a=1, b=2): return a+b
print func()
print func(c=3)
print func(a=3,b=4)
More information about the Python-list
mailing list