[Python-ideas] Syntax for allowing extra keys when unpacking a dict as keyword arguments
Viktor Roytman
viktor.roytman at gmail.com
Fri Apr 12 13:52:45 EDT 2019
That is an interesting solution. In the case of a function from another
library, you could apply the decorator as needed like.
fief(func)(**{'a': 1, 'b': 2})
It looks a little strange, but I've seen stranger.
On Friday, April 12, 2019 at 12:18:34 PM UTC-4, Lucas Bourneuf wrote:
>
> Hello !
>
> I made *fief*, a small python package allowing just that using a
> decorator:
>
> from fief import filter_effective_parameters as fief
>
> @fief
> def func(a, b):
> # some implementation
>
> # and then, use it as you want to:
> func(**MY_BIG_CONFIG_DICT_WITH_MANY_WEIRD_KEYS)
>
> The code is quite simple. You may want to use it, with modifications (i
> didn't touch the code for months, maybe years ; it could probably be
> improved now).
> Link: https://github.com/aluriak/fief
>
> The code:
>
> def filter_effective_parameters(func):
> """Decorator that filter out parameters in kwargs that are not related
> to
> any formal parameter of the given function.
> """
> @wraps(func)
> def wrapper(*args, **kwargs):
> formal_parameters = frozenset(signature(func).parameters.keys())
> return func(*args, **{
> arg: value
> for arg, value in kwargs.items()
> if arg in formal_parameters
> })
> return wrapper
>
> Best regards,
> --lucas
>
>
>
> ----- Mail original -----
> > De: "Viktor Roytman" <viktor... at gmail.com <javascript:>>
> > À: "python-ideas" <python... at googlegroups.com <javascript:>>
> > Envoyé: Vendredi 12 Avril 2019 18:01:43
> > Objet: Re: [Python-ideas] Syntax for allowing extra keys when unpacking
> a dict as keyword arguments
>
> > I could see this being an option, but to someone unfamiliar with it, it
> > might seem strange that * unpacks iterables, ** unpacks dicts, and ***
> is a
> > special thing only for keyword arguments that mostly behaves like **.
> >
> > On Friday, April 12, 2019 at 11:26:37 AM UTC-4, Bruce Leban wrote:
> >>
> >>
> >> On Fri, Apr 12, 2019, 8:12 AM Viktor Roytman <viktor... at gmail.com
> >> <javascript:> wrote:
> >>
> >>>
> >>> >>> func(**{'a': 1, 'b': 2})
> >>> Traceback (most recent call last):
> >>> File "<stdin>", line 1, in <module>
> >>> TypeError: func() got an unexpected keyword argument 'b'
> >>>
> >>
> >> Perhaps func(***kws)?
> >>
> >> I think this is a real problem given the frequent convention that you
> can
> >> freely add fields to json objects with the additional fields to be
> ignored.
> >>
> >
> > _______________________________________________
> > Python-ideas mailing list
> > Python... at python.org <javascript:>
> > https://mail.python.org/mailman/listinfo/python-ideas
> > Code of Conduct: http://python.org/psf/codeofconduct/
> _______________________________________________
> Python-ideas mailing list
> Python... at python.org <javascript:>
> https://mail.python.org/mailman/listinfo/python-ideas
> Code of Conduct: http://python.org/psf/codeofconduct/
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20190412/52afc0b4/attachment-0001.html>
More information about the Python-ideas
mailing list