[Python-ideas] Syntax for allowing extra keys when unpacking a dict as keyword arguments
Viktor Roytman
viktor.roytman at gmail.com
Fri Apr 12 12:02:42 EDT 2019
That is certainly an option for functions that you have defined for
yourself, but generally not an option for a function from a library. I am
interested in a solution that works in general.
On Friday, April 12, 2019 at 11:48:38 AM UTC-4, Chris Angelico wrote:
>
> On Sat, Apr 13, 2019 at 1:12 AM Viktor Roytman <viktor... at gmail.com
> <javascript:>> wrote:
> >
> > Currently, unpacking a dict in order to pass its items as keyword
> arguments to a function will fail if there are keys present in the dict
> that are invalid keyword arguments:
> >
> > >>> def func(*, a):
> > ... pass
> > ...
> > >>> func(**{'a': 1, 'b': 2})
> > Traceback (most recent call last):
> > File "<stdin>", line 1, in <module>
> > TypeError: func() got an unexpected keyword argument 'b'
> >
> > The standard approach I have encountered in this scenario is to pass in
> the keyword arguments explicitly like so
> >
> > func(
> > a=kwargs_dict["a"],
> > b=kwargs_dict["b"],
> > c=kwargs_dict["c"],
> > )
> >
> > But this grows more cumbersome as the number of keyword arguments grows.
> >
> > There are a number of other workarounds, such as using a dict
> comprehension to select only the required keys, but I think it would be
> more convenient to have this be a feature of the language. I don't know
> what a nice syntax for this would be, or even how feasible it is.
> >
>
> I'm not 100% sure I understand your proposal, so I'm going to restate
> it; anywhere that I'm misrepresenting you, please clarify!
>
> Given this function and this dictionary:
>
> def func(*, a):
> pass
>
> args = {'a': 1, 'b': 2}
>
> you want to call the function, passing the recognized argument 'a' the
> value from the dict, but ignoring the superfluous 'b'.
>
> Are you able to alter the function? If so, just add kwargs to it:
>
> def func(*, a, **_):
> pass
>
> and then any unrecognized args will quietly land in the junk dictionary.
>
> ChrisA
> _______________________________________________
> 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/d216fc53/attachment.html>
More information about the Python-ideas
mailing list