[Python-Dev] Arbitrary non-identifier string keys when using **kwargs (original) (raw)

Steven D'Aprano steve at pearwood.info
Fri Oct 12 06:41:11 EDT 2018


On Thu, Oct 11, 2018 at 01:27:08PM -0400, Chris Barker - NOAA Federal via Python-Dev wrote:

> On the server side, the application could be doing something like > assuming that the kwargs are e.g. column names

This is exactly a use-case for non-identifier strings in kwargs.

Why not just pass a dict as an argument, rather than (ab)using kwargs?

Instead of:

we can cut out the two middle steps. So I must admit, I'm perplexed as to why people use an extra (superfluous?) ** to unpack a dict that's just going to be packed again. I just don't get it. shrug

I also wonder whether the use-cases for this would be reduced if we introduced verbatim names?

https://mail.python.org/pipermail/python-ideas/2018-May/050791.html

Keys containing non-identifier characters like spaces and hyphens would still need the kwargs trick, but for reserved words you could just escape the argument:

def spam(eggs, \while=None): ...

spam(eggs=1234, \while=5678)

which frankly looks much better to me than

spam(eggs=1234, **{"while": 5678})

-- Steve



More information about the Python-Dev mailing list