<div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Tue, Oct 9, 2018 at 5:17 PM Barry Warsaw <<a href="mailto:barry@python.org">barry@python.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Oct 9, 2018, at 16:21, Steven D'Aprano <<a href="mailto:steve@pearwood.info" target="_blank">steve@pearwood.info</a>> wrote:<br>
> <br>
> On Tue, Oct 09, 2018 at 10:26:50AM -0700, Guido van Rossum wrote:<br>
>> My feeling is that limiting it to strings is fine, but checking those<br>
>> strings for resembling identifiers is pointless and wasteful.<br>
> <br>
> Sure. The question is, do we have to support uses where people<br>
> intentionally smuggle non-identifier strings as keys via **kwargs?<br>
<br>
I would not be in favor of that.  I think it doesn’t make sense to be able to smuggle those in via **kwargs when it’s not supported by Python’s grammar/syntax.<br></blockquote><div><br></div><div>Well, it currently works in all Python implementations (definitely in CPython, and presumably in PyPy and Jython because they tend to follow CPython carefully). The less the spec leaves undefined the better, IMO, and I fully expect we'll be breaking code that is doing this. So we might as well make it the law.</div><div><br> </div><div>For example, in some code bases it's a pretty common pattern to pass dicts around using **kwds several levels deep, with no intention to unpack it into individual keyword arguments -- the caller sends a dict, and the receiver accepts a dict and does dict-y things to it. Sure, they probably shouldn't be abusing **kwds, but they are, and I can't really blame them -- possibly this code evolved from a situation that did use keyword args.<br></div></div><br>-- <br><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature">--Guido van Rossum (<a href="http://python.org/~guido" target="_blank">python.org/~guido</a>)</div></div>