[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:50:36 EDT 2019
Any time I am using a function from a library that accepts keyword
arguments. For example, an ORM model constructor that accepts fields as
keyword arguments (like Django).
On Friday, April 12, 2019 at 12:57:43 PM UTC-4, Rhodri James wrote:
>
> On 12/04/2019 16:10, Viktor Roytman 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.
>
> What circumstance do you want to do this in that simply passing the
> dictionary as itself won't do for?
>
> --
> Rhodri James *-* Kynesim Ltd
> _______________________________________________
> 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/a31da40d/attachment.html>
More information about the Python-ideas
mailing list