<p dir="ltr">On Apr 4, 2014 10:04 AM, "David Mertz" <<a href="mailto:mertz@gnosis.cx">mertz@gnosis.cx</a>> wrote:<br>
> I confess that after reading this thread, and a number of related past ones, I'm still not certain exactly what problem all of this is needed to solve.</p>
<p dir="ltr">Yeah, it won't be worth it without justification.  :)  I'll spell it out in the PEP, but basically it boils down to these reasons:</p>
<p dir="ltr">* Helpful in debugging (from Raymond and others).<br>
* Controlling object presentation.<br>
* Anywhere you want to set iteration order and name/value in a single call (from Nick).<br>
  + Factories for ordered types.<br>
  + Serializable objects where order matters.<br>
* Keyword argument priority.</p>
<p dir="ltr">I have a few more less concrete use cases as well.  OrderedDict is the first example everyone cites, but it's simply the most obvious.  Furthermore, it's a rather self-referential example. :)  As I said, I'll make the full case in the PEP, which I hope to get out today.</p>

<p dir="ltr">> ISTM that if one has a special function calling requirement to pass in an ordered collection of key/value pairs, one can already just use a special and available call signature for your function:<br>
><br>
>   def myfunc(a, b, *keyvals):<br>
>       od = OrderedDict(keyvals)<br>
>       # ... do other stuff<br>
><br>
> Call this like:<br>
><br>
>   value = myfunc(foo, bar, ('a',1), ('z',2), ('b',3))<br>
><br>
> Yes, it's a slightly special form of the calling convention, but it does something slightly special with its key/val-like arguments, so that seems like a reasonable tradeoff.  The solution is purely local to the writer of the function who needs this.</p>

<p dir="ltr">That's clever.  However, it is basically the same as the status quo: if you want to preserve order you cannot use keyword arguments, including ** unpacking, even though they are the natural way to do it.  For existing functions, preserving order means changing code even though the order is already available.  The point of my proposal is to teach the interpreter to preserve the order.</p>

<p dir="ltr">-eric</p>