[Python-ideas] A sorted version of **kwargs

Masklinn masklinn at masklinn.net
Thu Jan 20 20:40:38 CET 2011

On 2011-01-20, at 17:42 , Guido van Rossum wrote:
> On Thu, Jan 20, 2011 at 6:05 AM, M.-A. Lemburg <mal at egenix.com> wrote:
>> Nick Coghlan wrote:
>>> On Thu, Jan 20, 2011 at 8:28 PM, Steven D'Aprano <steve at pearwood.info> wrote:
>>>> I would be +0 on making **kwargs an ordered dict automatically, and -1 on
>>>> adding ***ordered_kwargs. Because kwargs is mostly used only for argument
>>>> passing, and generally with only a small number of items, it probably
>>>> doesn't matter too much if it's slightly slower than an unordered dict.
>>> Yeah, simply making the kwargs dict always ordered is likely the way
>>> we would do it. That's also the only solution with any chance of
>>> working by default with the way most decorators are structured
>>> (accepting *args and **kwargs and passing them to the wrapped
>>> function).
>> -1.
>> How often do you really need this ?
>> In which of those cases wouldn't a static code analysis give you
>> the call order of the parameters already  ?
>> "Nice to have" is not good enough to warrant a slow down of
>> all function calls involving keyword arguments, adding overhead
>> for other Python implementations and possibly causing problems
>> with 3rd party extensions relying on getting a PyDict for the
>> keyword arguments object.
> What he says.
> In addition, I wonder what the semantics would be if the caller passed
> **d where d was an *unordered* dict…
Create an ordereddict based on d's iteration order would seem logical (but order would keep conserved for kwargs passed in explicitly, so in `foo(a=some, b=other, c=stuff, **d)` where `d` is a `dict` a, b, c would be the first three keys and then the keys of d would be stuffed after that in whatever order happens).

Do Python 3's semantics allow for further kwargs after **kwargs?

More information about the Python-ideas mailing list